redis教程

2023-11-04

Redis和tp使用

类型

支持多种数据结构类型,包括string(字符串)、hash(哈希)、list(链表)、set(无序集合)、Zset(有序集合)

Redis能读的速度是110000次/s,写的速度是81000次/s 。

Redis所有单个命令的执行都是原子性的。

适合场合及其优势

(1)高性能缓存,最常见的应用场景

(2)多类型数据结构,适合各种类型数据,

(3)Redis分布式存储

(4)数据有生命周期,Redis的键可以设置过期时长,一段时间以后自动删除。

(5)高并发和海量数据的处理

(6)数据持久化,数据存储到硬盘里面,服务器断电不丢失。

原生先连接

php安装redis

$redis = new Redis(); $redis->connect('127.0.0.1', 6379, 60);//连接redis服务,指定主机,端口,和超时时间

$redis->auth('123456');//密码

切换数据库

//tp
Cache::select(2);
原生
$redis = new Redis();
$redis->connect('127.0.0.1', 6379, 60);//连接redis服务,指定主机,端口,和超时时间
$redis->select(2);
原生
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('123456');//密码
$dade = $redis->set("name", "dade");
echo $redis->get('name');

(字符串)string

string是redis最基本的类型

redis的string可以包含任何数据,包括序列化的对象、数组。

单个value值最大上限是1G字节, 如果只用string类型,redis就可以被看作加上持久化特性(服务器重启之后,数据不丢失)的memcache

应用场景,缓存HTML页面,关系型数据库的查询结果,统计网站访问者数量,每天注册用户数,统计活跃用户,用户在线状态等等。

(1)set保存

语法:set  键名称  值 
返回值,设置成功返回OK,设置失败返回nil
注意:重新设置则直接覆盖。
Cache::set('name', '大得0',36000);//缓存
Cache::get('name');//查
原生
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$dade = $redis->set("name", "dade");
echo $redis->get('name');

(2)mset保存多个

语法:mset key value [key value]

同时设置多个key,如果key存在会覆盖,该命令是原子的,所有的键会同时设置成功或失败,成功返回OK

原生
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$dade = $redis->mset(array('name'=>'666','age'=>19));
echo $redis->get('age');
tp6
Cache::mset(array('name'=>'dade','age'=>19));//缓存
echo Cache::get('age');

(3)setex保存设置时间

语法:setex key seconds value

给一个键设置为字符串类型,并指定生存时间(单位:秒),该命令是原子的,如果设置失败或指定生存时间失败,会恢复初始状态。

返回值:如果设置成功,返回OK,如果设置失败,返回错误信息。

//缓存数字,缓存文字和字符串(错)
Cache::setex('dades',100,300);
echo Cache::get('dades');
原生
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->setex('keys',100,10);
echo $redis->get('keys');

(4)setnx设置字符串类型

语法:setnx key value

如果key不存在,将其设置为字符串类型,设置成功,如果该键已经存在,则设置失败。

设置成返回1,设置失败,返回0.

原生
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->setnx('ssss','6666');
echo $redis->get('ssss');

(5)get查

语法:get 键名称

(6)mGet查多个

$redis->set('key1', 'value1');
$redis->set('key2', 'value2');
$redis->set('key3', 'value3');
$redis->mGet(array('key1', 'key2', 'key3')); //array('value1', 'value2', 'value3');
$redis->mGet(array('key0', 'key1', 'key5'));//array(`FALSE`, 'value2', `FALSE`);

(7)strlen查字符串长度

语法:strlen key

返回key的字符串长度,

返回值:字符串长度,如果key不存在返回0,如果不是字符串类型,返回错误信息。

Cache::strlen('ddddss1');
原生
$redis->strlen('ddddss1');

(8)getSet设置新值返回旧值

语法:getset key value

原子的给一个key设置新值,并且将旧值返回,

返回值,如果key不是字符串类型,返回一个错误,

应用场景:比如获取计数器并且重置为0.

$redis->set('x', '42'); 
$exValue = $redis->getSet('x', 'lol');  // return '42'
$redis->get('x')'       // return 'lol'

(9)incr 每执行一次+1

对key的值做加加操作,,每执行一次值加1,值类型要是数据类型。

语法:incr key

将key中存储的数字值增一操作,如果key不存在,则key的值会先被初始化为0,然后再执行incr操作,key的值必须是整型。

Cache::incr('age');

(10)incrBy一次加多少

执行加法的命令,可以指定相加的值,

语法:incrby key 相加的值

$redis->incrBy('key1', 10);

(哈希,存储对象)hash

Redis中的hash类型可以看成是具有key和value的容器,该类型非常适合存储对象信息,

mysql中一行的数据,类似于关联数组。

(1)hset保存对象

设置哈希里面的field和vlaue的值。

语法:hset 哈希的名称(键名称) field value

Cache::hset('name','dade','大得');
Cache::hset('name','age',18);
echo Cache::hget('name','age');

(2)hget读单

Cache::hget('name','age');

(3)hMset一次保存多个

一次性设置多个field和value

$redis->delete('user:1');
$redis->hMset('user:1', array('name' => 'Joe', 'salary' => 2000));
$redis->hIncrBy('user:1', 'salary', 100); 
//tp6
Cache::hMset('names',array('dade'=>123,'age'=>223));

(4)hMget一次获得多个

一次性获取 多个field的value

Cache::hMset('names',array('dade'=>123,'age'=>223));
$ss = Cache::hMget('names',array('dade','age'));
print_r($ss);

(5)hGetAll获得所有

获取指定哈希中所有的field和value

语法:hgetall 哈希的名称

Cache::hMset('names',array('dade'=>123,'age'=>22663));
$ss = Cache::hGetAll('names');
print_r($ss);

(链表,队列,最新,列表)list

list类型其实就是一个字符串的双向链表,按照插入顺序排序。可以添加一个元素到链表的头部(左边)或者尾部(右边),一个链表最多可以包含232-1个元素(4294967295,每个链表超过40亿个元素),这使得list既可以用作栈,也可以用作队列。

应用场景,粉丝列表,最新文章,消息队列等。

(1)lpush头部添加

从链表的头部添加一个或多个元素

语法: lpush 链表的名称(键的名称) 元素,操作为原子性操作,如果key不存在,一个空列表会被创建并执行lpush操作。返回执行lpush命令后,列表的长度。

echo Cache::lpush ('names','大得');//头部添加保存
echo Cache::lpush ('names','大得1');//头部添加保存
echo Cache::lpush ('names','大de2');//头部添加保存

(2)lrange查所有

获取链表里面的元素

语法:lragne 链表的名称 开始下标(索引) 结束下标(索引)

注意:如果开始下标是0,结束下标是-1则是返回链表中所有的元素。

注意:链表里面的元素是序号的(从0开始数,从头部开始),类似于索引数组

$dade =  Cache::lrange('names',0,-1);//读链表全部,数组
print_r($dade);

(3)lInsert插入某个之前

将元素插入到链表中某个元素之前或之后,

语法:lInsert(链表的名称)键 before|after 链表中的某个元素 新的元素。

如果命令执行成功,返回插入操作完成之后,列表的长度;如果没有找到链表中的元素,返回-1;如果链表不存在或空链表,返回0。

$dade =  Cache::lInsert('names', 'before', '大得', '6666');
print_r($dade);

(4)lset修改

修改链表中指定下标的元素;

语法:lset 链表名称 下标 新值

$dade =  Cache::lset('names', 1, '你来啊');
print_r($dade);

(5)lIndex返回指定下标值

返回链表中指定下标的元素

语法:lIndex 链表名 下标

$dade =  Cache::lIndex ('names', 1);
print_r($dade);

(6)rpush尾部添加

从链表的尾部添加元素

语法: rpush 链表的名称(键的名称) 元素

$dade =  Cache::rpush ('names', '尾部添加');
print_r($dade);

(7)llen返回列表的长度

返回列表的长度

语法:llen 链表名称

$dade =  Cache::llen ('names');
print_r($dade);

(8)lpop返回链表中头部的元素并删除

返回链表中头部的元素,并删除。

语法:lpop 链表名称

$dade =  Cache::lpop ('names');
print_r($dade);

(9)lrem删除链表中的元素

删除链表中的元素

语法:lrem key count value

根据参数count的值,删除链表中与value相等的元素。

count>0,从表头开始向表尾搜索,删除与value相等的元素,数量为count;

count<0;从表尾开始向表头搜索,删除与value相等的元素,数量为count;

count=0;删除表中所有与value相等的值,

返回值,被删除的元素的数量

$dade =  Cache::lrem ('names','大得');
print_r($dade);
原生
redis->lPush('key1', 'A');
$redis->lPush('key1', 'B');
$redis->lPush('key1', 'C'); 
$redis->lPush('key1', 'A'); 
$redis->lPush('key1', 'A'); 

$redis->lRange('key1', 0, -1); /* array('A', 'A', 'C', 'B', 'A') */
$redis->lRem('key1', 'A', 2); /* 2 */
$redis->lRange('key1', 0, -1); /* array('C', 'B', 'A') */

(10)ltrim保留指定范围的元素

保留指定范围的元素

语法:ltrim 链表的名称 开始下标 结束下标

$dade =  Cache::ltrim ('names',0,10);
print_r($dade);

(11)rpop返回链表尾部的元素并删除

删除并返回链表尾部的元素

$dade =  Cache::rpop ('names');
print_r($dade);

(无序集合)set

redis的set是string类型的无序集合

set元素最大可以包含(2的32次方-1)(整型最大值)个元素。

关于set集合类型除了基本的添加、删除操作,其他有用的操作还包含集合的取并集(union),交集(intersection),差集(difference)。通过这些操作可以很容易的实现sns中的好友推荐功能。

sina公司的好友关注关系就大量使用了set集合类型。

注意:每个集合中的各个元素不能重复

该类型应用场合:qq好友推荐。

tom朋友圈(与某某是好友):mary jack xiaoming wang5 wang6

linken朋友圈(与某某是好友):yuehan daxiong luce wang5 wang6

(1)sadd向集合中添加元素

向集合中添加元素

语法:sadd 集合名(键名) 元素名称

$ss = Cache::sadd('namesaa','大得');
print_r($ss);

(2)smembers获取集合中的元素

获取集合中的元素

语法:smembers 集合名

$ss = Cache::smembers('namesa');
print_r($ss);

(3)sdiff差集,集合1存在,集合2不存在

获取集合中的差集(在集合1中存在,不在集合2中存在的元素)

语法:sdiff 集合1 集合2

$ss = Cache::sdiff('namesa','namesaa');
print_r($ss);

(4)sinter交集,两个集合中都存在

获取交集(在两个集合中都存在的元素)

语法:sinter 集合1 集合2

$ss = Cache::sinter('namesa','namesaa');
print_r($ss);

(5)sunion两个集合合并去掉重复

求并集(两个集合合并后,去掉重复的元素)

语法:sunion 集合1 集合2

$ss = Cache::sunion('namesa','namesaa');
print_r($ss);

(6)scard获取集合中元素的个数

获取集合中元素的个数

语法:scard 集合名称

$ss = Cache::scard('namesa');
print_r($ss);

(有序集合)zset

sorted set是set的一个升级版本,他在set的基础上增加了一个顺序属性(权值),这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。操作中的key理解为zset的名字。

注意:序号是可以重复的,在添加元素时,如果该元素已经存在,则更新序号的值。

(1)zadd有序集合中添加元素

向有序集合中添加元素。如果该元素存在,则更新其序号。

语法:zadd 集合名 序号 元素

//序号可重复
$ss = Cache::zadd('dade',1,'dade3');
print_r($ss);

(2)zrange读升续排列

(把集合排序后,返回名次[start,stop]的元素

默认是升续排列

Withscores 是把score也打印出来

按序号升序获取有序集合中的内容,

语法:zrange 集合名称 开始下标 结束下标

$ss = Cache::zrange('dade',0,-1);
print_r($ss);

(3)zrevrange读降序获取

按序号降序获取有序集合中的内容。

语法:zrevrange 集合名称 开始下标(索引) 结束下标(索引)

$ss = Cache::zrevrange('dade',0,-1);
print_r($ss);

(4)zremrangebyrank范围删除

zremrangebyrank 删除集合中排名在指定范围的元素(顺序从小到大排序)

语法:zremrangebyrank key min max

$ss = Cache::zremrangebyrank('dade',0,1);//删除集合0到1的元素
print_r($ss);

(5)zcard返回集合中元素的个数

语法:zcard key

返回有序集合中元素的个数

$ss = Cache::zcard('dade');
print_r($ss);

(6)zscore返回给定元素对应的score

语法:zscore key 元素

返回给定元素对应的score,就是给的序号

$ss = Cache::zscore('dade','dade3');
print_r($ss);

Redis 中的事务

Cache::multi();//开启事务
Cache::lpush('dade','dade3');
Cache::lpush('dade','dade3');
Cache::lpush('dade','dade3');
Cache::exec();//提交事务,提交后指定执行

Cache::multi();//开启事务
Cache::lpush('dade','dade3');
Cache::lpush('dade','dade3');
Cache::lpush('dade','dade3');
Cache::discard();//取消事务,不执行

乐观锁(原生)
set ticket 1
set money 100
watch ticket  //开启检测ticket,有变化,当前事务取消
multi
decr ticket
decrby money 100
exec  //提交事务ticket,监听到有变化,事务被取消

Redis主从复制

网站运行,mysql的写入、读取操作的sql语句比例:1:7

mysql为了降低每个服务器负载,可以设置读写分类(有写服务器、有读取服务器)

为了降低每个redis服务器的负载,可以多设置几个,并做主从模式

一个服务器负载“写”(添加、修改、删除)数据,其他服务器负载“读”数据

主服务器数据会“自动”同步给从服务器

Redis支持简单易用的主从复制(master-slave replication)功能,该功能可以让从服务器(slave server)成为主服务器(master server)的精确复制品。

主要作用:

主从备份,防止主服务器宕机;

读写分离,分担主服务器的任务;

任务分离,从服务器分别担任备份工作和计算工作。

注意点:

Redis使用异步复制,

一个主服务器可以有多个从服务器

不仅主服务器可以有从服务器,从服务器也可以有自己的从服务器,

复制功能不能回阻塞主、从服务器

主服务器配置

requirepass 设置的密码

requirepass 123456

配置:**

(1)bind 127.0.0.1改为 #bind 127.0.0.1

(2)protected-mode yes 改为 protected-mode no(关闭只能本地通信)

从服务器配置

(1)通过slaveof指定自己的角色,主服务器的地址和IP

slaveof 主服务器ip 端口号

(2)从服务器只读

从redis2.6开始,从服务器支持只读模式,通过slave-read-only配置项配置,该模式为从服务器的默认模式

(3)指定从服务器连接主服务器的密码

如果主服务器通过requirepass选项设置了密码,为了让从服务器同步操作顺利进行,通过masterauth配置连接主服务器密码。

配置:

#配置连接主服务器ip 端口

slaveof 192.161.1.69 22

#如果主服务器设置了密码,masterauth 密码

masterauth 123456

#默认就开启,从服务器只读模式

slave-read-only yes

查看是否配置正确

在从服务器执行info replication命令查看是否配置正确;

info replication

如果撤销,只需在从服务器里面屏蔽上面的配置即可。

配置注销就可以

#slaveof 主服务器ip 端口号

#masterauth 123456

redis主从复制的缺陷

每次从服务器断开后,无论是主动断开,还是网络故障,再连接主服务器,从服务器都要从主服务器全部dump出来rdb,再aof;即同步的过程都要重新执行一遍,所以要记住如果是多台从服务器时,不要一下子都启动起来

读数据

自己写,如果多台服务器,代码也在多台,做了负载均衡,写放一台服务器上,读本地redis从服务器,买一台都安装独立的redis(从服务器)。当要写入,封装一个方法,写到主服务器。

或者redis都不在本地,在代码中封装成一个数组,作为读分配。写封装一个方法或者采用框架的配置上主服务器

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redis教程 的相关文章

  • 显示表中的记录

    我的第一个 PHP 项目遇到了一些麻烦 我试图从 MySQL 数据库 有 3 条记录 获取数据并将其显示在表格中 问题是它似乎只显示记录 2 和 3 它跳过了第 1 条记录 请参阅我的代码并在下面显示 if mysqli connect e
  • 如何在 Python 中包含 PHP 脚本?

    我有一个 PHP 脚本 news generator php 当我包含它时 它会抓取一堆新闻项并打印它们 现在 我在我的网站 CGI 中使用 Python 当我使用 PHP 时 我在 新闻 页面上使用了这样的内容 为了简单起见 我删掉了这个
  • PHP - Filter_var 替代方案?

    我构建了一个 php 脚本来输出以表单形式发布的数据 但遇到了问题 网站将运行的服务器运行 PHP 5 1 6 此版本的 PHP 不支持 filter var 我需要知道短期内的替代方案 最好是昨天 但在 Google 或 Stack Ov
  • 如何复制 ArrayIterator 以保留其当前迭代位置?

    因为这似乎是我必须做的才能达到这种效果 arr a gt first b gt second iter new ArrayIterator arr Do a bunch of iterations iter gt next new iter
  • Yii2 异常:ApcCache 需要加载 PHP apc 扩展

    在高级模板前端的主配置中配置缓存组件时 我收到异常 在我的 php ini 上启用了扩展 rsults 如何解决此问题 前端 config main php cache gt class gt yii caching ApcCache ke
  • PHP 绑定“bigint”数据类型(MySQLi 准备好的语句)

    studentId 57004542323382 companyOfferId 7 sql INSERT INTO studentPlacement companyOfferId studentId VALUES if stmt db gt
  • 当sql连接中存在两个同名列时,如何从一个表列中获取值

    当我连接两个具有相同名称列的表时 我目前面临着尝试获取值的问题 例如 table1 date和table2 date 每个表中的日期不同 我将如何获取 日期 本例中的表1 我目前正在跑步 while row mysqliquery gt f
  • 在 Laravel 5 中截断表

    描述 我有一个充满测试数据的表 有时 我想清除它以获取新数据 我可以在 DBMS 应用程序中执行截断 例如MySQL 工作台 但我试图在我的应用程序中实现它 Goal 创建一个按钮 单击时截断数据库中的表 这是我的步骤 1 声明一条路线 R
  • 使用 php 在多维数组中按键排序[重复]

    这个问题在这里已经有答案了 可能的重复 在 PHP 中对多维数组进行排序 https stackoverflow com questions 2059255 sorting multidimensional array in php 如何在
  • 限制自己超载外部 API 的速率

    我发现了很多信息和脚本示例 展示了如何对 API 用户进行速率限制 但我无法找到任何示例来说明在施加这些限制时如何对您自己的 API 请求进行速率限制 我总是用诸如以下的代码来限制我的脚本sleep or usleep命令 但感觉这是一种低
  • 将 Google 信任徽章添加到 Magento

    我正在尝试将 Google Trust Badge 添加到我的 magento 商店 我尝试在 Magento 网站上搜索扩展程序 但找不到 我是否需要将以下代码粘贴到产品和结账页面 还是必须对其进行更改 如果有人能引导我走向正确的方向 我
  • 如何解码 eval( gzinflate( base64_decode(

    我已将此代码注入到我的网站中 如何解码尾随字符串 我需要知道发生了什么以及其背后的代码是什么 这应该输出将被执行的代码eval 我希望这就是您正在寻找的
  • 语法错误,第 288 行出现意外的“endif”(T_ENDIF)[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我一直在离线处理我的 WordPress 网站的此代码错误 解析错误 语法错误 homez 541 photoher marie
  • 为什么我的 if 语句没有按我预期的方式工作?

    我正在尝试实现以下目标 我向我的 SQL 数据库询问使用SELECT FROM subjects 这样做之后我要求使用数组mysqli fetch assoc 在那之前一切都很好 现在的问题是 当我尝试在每个循环中修改 genero 的值
  • postgreSql 中特定时间后表更新

    我已经在 postgres 中创建了表 现在我想在特定时间 例如 1 小时 后更新一行 我看到很多问题 例如 https dba stackexchange com questions 56424 column auto updated a
  • 使用 PHP 的 MySQL 连接字符串

    我正在尝试通过本地计算机连接到托管在我的服务器上的数据库 我的服务器有cPanel 11 它是一个典型的共享服务器 由CentOS提供支持 安装了PHP和MySQL 准确地说 我在同一台服务器上持有经销商帐户 我想在不同帐户或域之间访问数据
  • 如何仅使用 PHP5 RecursiveDirectoryIterator 类递归显示具有特定文件类型的文件夹和子文件夹

    您好 我正在尝试使用 FilterIterator 上的扩展来获取 RecursiveDirectoryIterator 类 但由于某种原因 它仅在根目录上进行迭代 我的代码是这样的 class fileTypeFilter extends
  • 如何使用 PHP 对字符串进行 rot13 处理?

    我有一个很大的 php 代码 我想手动对其进行编码和解码 我的问题是 php 代码里面有很多单引号和双引号 因此我在使用时出现错误str rot13 功能如下 那么正确的语法是什么以及如何使用下面的函数进行编码 str rot13 That
  • 从 PHP 数组生成 HTML 表

    我不明白这一点 我需要解决看似简单的问题 但这超出了我的逻辑 我需要编写一个函数 table columns input cols 它将输出一个表 示例 input array apple orange monkey potato chee
  • 如何在laravel中注册后自动登录

    我在 laravel 中注册用户时遇到问题 user假设是包含所有数组元素的数组 同时自动登录以下代码结果false 数据库中保存的密码是hash make password user id this gt user model gt ad

随机推荐

  • QT基础:遍历QFormLayout列表布局器中的控件,并链接槽函数进行操作

    QFormLayout 是一个列表布局器 每一行的序号是从0开始的 类似于数组的下标 每一行有两个元素 左边的元素叫标签 Label 右边的元素叫字段 Field 这里是一个QFormLayout简单的布局演示 QFormLayout 列表
  • Hive的Join操作、Hive解决数据倾斜问题、Hive优化、Hive的分桶表、JDBC、体系结构、工程流程

    Hive的Join操作 order表数据 1 20180710 P001 20 2 20180710 P002 14 3 20180710 P001 35 4 20180710 P002 40 5 20180710 P001 10 6 20
  • 解决文本框刷新后之前输入的值还存在,没有清空的问题

    有过表单设计经验的朋友肯定知道 当我们在浏览器中输入表单信息的时候 往往input文本输入框会记录下之前提交表单的信息 以后每次只要双击 input文本输入框就会出现之前输入的文本 这样有时会觉得比较方便 但有时也会暴露用户的隐藏数据 所以
  • 如何在Windows打造出你的Linux开发环境

    在这篇文章里 我将向大家分享一些软件安装和环境设置方法 这是我最近的实践收获 并对使用效果非常满意 我不能永远待在Linux上开发 但我非常喜欢Linux终端和Linux环境 在开发一些开源软件时 Linux会让我感觉所有的事情变得更容易
  • uniapp的入栈出栈

    uniapp管理页面是利用栈的形式管理 因此多次入栈不出栈会造成页面的卡顿 入栈出栈的顺序不对 会在返回的时候不能回到对应页面 都是因为出栈入栈的时机不对造成的 一个页面会在什么时候进行入栈 又在什么时候出栈 他们分别触发了什么生命周期 这
  • Latex关键词(key words)的基本格式代码(加粗、斜体、空白行+首段空两格)

    Latex关键词 key words 的基本格式指令 加粗 斜体 空白行 首段空两格 在用英文写report或reference时keywords是必不可少的 Abstract和keywords这种简单的指令直接套用固定的格式模板就行 根据
  • docker构建国内镜像服务

    在国内想要下载镜像比较困难 因此很多公司都构建自己的私有仓库 如何搭建私有仓库 请参考 docker私有仓库从无到有 然而即使私有仓库服务构建完成 但是里面没有镜像 一样很苦恼 今天介绍一下如何利用国内云服务商提供的镜像加速器 来快速下载镜
  • Python中pymssql 的使用操作

    在python3 x中 可以使用pymysql来MySQL数据库的连接 并实现数据库的各种操作 本次博客主要介绍了pymysql的安装和使用方法 PyMySQL的安装 一 windows上的安装方法 在python3 6中 自带pip3 所
  • Entity Framework Core系列教程-25-Entity Framework Core日志

    Entity Framework Core日志 我们经常需要在EF Core中记录SQL并更改跟踪信息以进行调试 EF Core日志记录自动与 NET Core的日志记录机制集成 因此 在隐含使用EF Core的日志记录之前 了解有关 NE
  • SpringBoot第16讲:如何生成接口文档之Swagger技术栈

    SpringBoot第16讲 如何生成接口文档之Swagger技术栈 SpringBoot开发Restful接口 有什么API规范吗 如何快速生成API文档呢 Swagger 是一个用于生成 描述和调用 RESTful 接口的 Web 服务
  • `算法知识` 笛卡尔坐标系, 边长与边权, 曼哈顿距离, 欧几里得距离,外接矩形

    catalog 图像引用 图一 图二 笛卡尔坐标系的 边长 与 边权 曼哈顿距离 曼哈顿边权 与 欧几里得距离 的转换 凸多边形的曼哈顿周长 与 外接矩形的欧几里得周长 例题 ID COUNT 4 跳转链接已经使用了 0 ID COUNT
  • kali中binwalk/foremost/zip2john工具的配合使用

    kali中binwalk foremost zip2john工具的配合使用 背景 通过binwalk工具观察该文件是否包含其他文件 通过foremost工具将隐藏文件提取出来 通过zip2john工具破解压缩包的密码 心得体会 背景 最近参
  • 魏副业而战:开学季,闲鱼卖什么好?

    我是魏哥 与其躺平 不如魏副业而战 现在八月底了 意味着暑假结束 新的学期将要开始 作为闲鱼卖家 可顺势布局一下 那卖什么好呢 开学季嘛 卖学习相关的 例如 文具 书包 练习本 教辅书籍等等 只要和学生相关的都可以的 另外 有些大学生可能会
  • oracle 连接串解释

    工作中 oracle环境 常常通过连接串描述 scott 123456 DESCRIPTION ADDRESS PROTOCOL TCP HOST 192 168 206 100 PORT 1521 CONNECT DATA SERVER
  • 小孩学机器人编程怎么样

    小孩学机器人编程怎么样 孩子的学习从古至今都是家长们十分关心和重视的一件事情 很多的家长在培养孩子的学习方面也是相当耐心的 就拿现在很多的家长想要孩子去学习机器人编程的课程来说 他们对于小孩学机器人编程怎么样并不是很清楚 今天我们就一起来了
  • sqli-labs靶场Less-3

    1 访问首页 index php id 1 这里的传参点是id 2 判断注入点是数字还是字符 如果是字符就需要闭合 and 1 1 qwe and 1 2 qwe 分析 通过以上探测发现并不起效果 考虑是不是和第一关一样需要单引号闭合 再次
  • 如何用一根网线实现在两台电脑之间传输数据

    下面我来说一说怎样用一根网线连接两台电脑 从而实现数据的传输 首先 我们要在两台电脑上分别设置其IPv4的配置 第一台电脑的设置步骤如下 打开网络和共享中心 点击更改设配器设置 在以太网那里右键属性 双击Internet 协议版本4 TCP
  • logstash多任务多管道pipeline配置启动,方案分析

    文章目录 6 0以下方案 6 0以下方案分析 启动方式 6 0以上方案 启动方式 6 0以下方案 logstash处理多个输入输出源方案 没有使用多管道 两个任务 jdbc demo 手写自定义mysql conf input stdin
  • keil调试GD32E23系列芯片找不到 j-link问题解决

    背景 今年因为疫情 下半年芯片疯涨 公司各个产品的芯片都比较紧缺 原来使用的芯片都为st和华大公司的芯片 价格还好 都不超过五块 现在拿货 st芯片价格已经涨了30块左右 吃不消 遂开始加紧开发国内的芯片 目录 一 问题 二 问题可能的根源
  • redis教程

    Redis和tp使用 类型 支持多种数据结构类型 包括string 字符串 hash 哈希 list 链表 set 无序集合 Zset 有序集合 Redis能读的速度是110000次 s 写的速度是81000次 s Redis所有单个命令的