从网站迁移过来,格式有些问题
get
- 获取redis 键的值
- get key
- Laravel:
$result=Redis::get("key");
set
- 设置redis 键的值
- set key value
更多用法:
ex seconds 给设置的键顺便加上多少秒过期时间 和setex命令功能一样
例子:
127.0.0.1:6379> ttl java
(integer) 478
127.0.0.1:6379> set php 123 ex 100
OK
127.0.0.1:6379> ttl php
(integer) 97
px milliseconds 给设置的键顺便加上毫秒的过期时间
127.0.0.1:6379> set php 123 px 30000
OK
127.0.0.1:6379> ttl php
(integer) 27
nx: 键必须是不存在或者过期了才能设置成功(如何已经存在这个键,那就设置不成功)
127.0.0.1:6379> set php 123 ex 100
OK
127.0.0.1:6379> set php 123 ex 100 nx
(nil)
xx: 键必须是存在的情况下才能设置成功
127.0.0.1:6379> set php 123 ex 100
OK
127.0.0.1:6379> set php 444 ex 100 xx
OK
127.0.0.1:6379> get php
"444"
客户端使用:
PHP:Pedis
$result=Redis::set("java","php","ex","100","nx");
del
- 删除某个键
- del key
dbsize
- 获取redis键的总数
- dbsize
-
实现原理:并不是便利,而是直接获取内置的count
对于过期的键,也不会立刻就获取到准确的数据,
比如说 设置了1000个键 30秒后过期,
30秒钟之后dbsize 获取的数字只会慢慢减少, 所以也依赖 redis的定时删除机制,
而且设置键过期时间不要都设置成一样的时间,要随机的秒数,防止清除过期键的时候发生阻塞
- Laravel中使用
Redis::dbsize();
exists
- 检测这个键名为php的是否存在
- exists php
expireat
- 设置php这个键的过期时间为某个时间段的时间搓
- expireat php 1580113366
-
第二个参数必须是时间搓格式,如果小于当前日期那就直接过期了
客户端使用
PHP:pedis
$result=Redis::expireat("php",strtotime('2020-03-24 00:00:00'));
相似命令
ttl
- 查看php这个键还有多少秒过期
- ttl php
type
- 查看php这个键是什么类型
- type php
incr
- 自增键为php的值,默认自增1,第二个参数是自增的值
- incr php 或者 incr php 2
-
返回的都是自增完成之后的值
如果键不存在的话,自动+1 返回1
如果是incr的键的值是字符串的话会直接报错
相似命令
但是没有自减浮点数
客户端使用
PHP:pedis中使用
Redis::incr("post:1:total");
setex
- 设置php的值为fpm过期时间为60秒
- setex php 60 fpm
-
可以实现分布式锁
根据这个过期时间自动解锁
decr
- 设置php自减,默认自减1,第二个参数可设置自减值
- decr php 2
-
相似命令:
客户端使用:
$result=Redis::decr("php");
append
- 往键为java的值中追加字符串jvm
- append java jvm
-
如果追加了int类型的值那么就会自动转成string了
客户端使用
PHP:pedis
$result=Redis::append("php","sss");
会返回追加完之后字符串的长度
strlen
- strlen java统计键名为java的值的长度
- strlen java
-
客户端使用
PHP:pedis
Redis::set("php","我的天"); $result=Redis::strlen("php");
中文的话一个字的长度为3,所以会返回9
getset
- 设置java的值为jvm并且返回设置之前的值
- getset java jvm
-
客户端使用
PHP:pedis
$result=Redis::getset("php","我的天");
setrange
- 原来java的值是jvm,现在设置字符串下标1的值变为p,最后结果就是jpm
- setrange java 1 p
-
客户端使用
PHP:pedis
127.0.0.1:6379> set php abcd OK 127.0.0.1:6379> setrange php 2 g (integer) 4 127.0.0.1:6379> get php "abgd"
参数说明 setrange key offeset value
object encoding
- 先设置一个键num:key 值为123,然后查看编码格式会输出int
- set num:key 123
object encodibg num:key
hset
- 如果键不存在会自动创建,创建一个student 哈希表,并且设置键wl的值为123
-
hset key field value
hset student wl 123
-
如果键不存在则会自动创建,如果键已经存在则会覆盖
客户端使用
PHP:pedis
$result=Redis::hset("student","wl","123");
hget
- 获取哈西表student中键名为wl的值
- hget key field
hget student wl -
客户端使用
PHP:pedis
$result=Redis::hget("php:hash","wwww");
若想获取多个键 使用 hmget
hdel
- 删除哈西表student中键名为wl和xiaoming
- hdel student wl xiaoming
-
删除一个多个键
客户端使用
PHP:pedis
$result=Redis::del("php:hash","wl","wl1","wl2");
返回的值就是删除成功的个数
hlen
- 获取哈西表student中有多少个键
- hlen student
-
只能获取哈希表,获取其他类型会报错
客户端使用
PHP:pedis
$result=Redis::hlen("php:hash");
hmset
- 批量设置student哈希表的键和值
- hmset student wl 万隆 xiaoming 小明
hmget
- 批量获取student哈希表的某些键的值
- hmget student wl xiaoming
-
客户端使用
PHP:pedis
$result=Redis::hmget("php:hash","wl","xiaoming");
hexists
- 判断student哈希表中有没有wl这个键
- hexists student wl
-
客户端使用
PHP:pedis
$result=Redis::hexists("php:hash","wl");
如果存在则返回1
hkeys
- 获取student哈希表中所有的键
- hkeys student
-
客户端使用
PHP:pedis
$result=Redis::hkeys("student");
相似命令
hvals
- 获取student的所有值
- hvals student
-
不建议使用,可能值太多会导致阻塞
客户端使用
PHP:pedis
$result=Redis::hvals("php:hash");
相似命令
hgetall
- 获取student的所有的键和值,先输出键再输出值
- hgetall student
-
自己测试和小打小闹可以用这个命令,生产环境非常不建议用
hstrlen
- 获取student中wl值的长度
- hstrlen student wl
-
版本要求
>= Redis3.2
客户端使用
PHP:pedis
$result=Redis::hstrlen("student","wl");
rpush
- 往列表work的右边加入一条或多条记录
- rpush work 写bug
-
命令
rpush stu:list wl xiaoming xiaohong
客户端使用
$result=Redis::rpush("stu:list","wl","xiaoming","xiaohong");
会返回添加完之后的列表的个数
使用场景
laravel 框架中自带的队列工具就是使用的redis list, 可以把进行的操作push到list中,再使用 lpop 弹出来,如果要操作的内容过于复杂可以把要操作的内容存入Hash中,然后在List中只存键就可以了
相似命令
lrange
- 获取列表work的从左边开始数第0个到2的值
- lrange key startd end
- lrange work 0 2
-
获取所有值
lrange work 0 -1
客户端使用
PHP:Pedis
$result=Redis::lrange("stu:list","0","-1");
lpush
- 往列表work的左边插入一条记录,记录的值只能是string或者int
- lpush work 改bug
-
命令
lpush stu:list wl xiaoming xiaohong
客户端使用
$result=Redis::lpush("stu:list","wl","xiaoming","xiaohong");
会返回添加完之后的列表的个数
相似命令
lindex
- 获取列表work的第一条记录
- lindex work 0
-
客户端使用
PHP:pedis
$result=Redis::lindex("stu:list","1");
llen
- 获取列表work的长度
- llen work
-
客户端使用
PHP:pedis
$result=Redis::llen("stu:list");
lpop
- 获取列表work的左边的第一个值,并且删除
- lpop work
-
从左边开始按顺序弹出第一个元素,并且会删除掉
客户端使用
PHP:pedis
$result=Redis::lpop("stu:list");
会返回弹出的值
rpop
- 获取列表work的右边的第一个值,并且删除
- rpop work
-
从右边开始按顺序弹出第一个元素,并且会删除掉
客户端使用
PHP:pedis
$result=Redis::rpop("stu:list");
lset
- 修改列表中第0个元素的值为再写bug
- lset work 0 再写bug
-
前提是这个下标必须有值,不然修改一个不存在的下标的值会报错
ERR index out of range
客户端使用
PHP:pedis
$result=Redis::lset("stu:list",2,"写bug");
blpop
- 和lpop功能类似,只是如果列表为空的话就会一直阻塞,100是阻塞的秒数。当然这个阻塞不会影响其他命令的操作
- blpop work 100
-
具体介绍看 brpop 都差不多
brpop
- 和rpop功能类似,只是如果列表为空的话就会一直阻塞,200是阻塞的秒数。当然这个阻塞不会影响其他命令的操作
- brpop work 200
-
可以添加多个key 比如
bropo register_work email_work 200
越往前的列表如果先出现数据就会先弹前面的,这样就可以模拟任务优先级了
实际中:一个发送注册邮件的队列和日志迁移的队列,当有新的注册的时候就要优先执行发送邮件队列
客户端操作
PHP:pedis
$result=Redis::brpop("stu:list1",200); dd($result);
返回值
array:2 [ 0 => "stu:list1" 1 => "java" ]
如果列表中没有值的话,会一直等着,第二个参数就是等待的秒数 ,200秒后还没有值就会退出了,
PHP非cli的话要设置脚本最大运行时常
使用场景
模拟一个队列
PHP代码
while (true){ $result=Redis::brpop("stu:list1",200); if (!isset($result[1])){ continue; } if ($result[1]=="send_email"){ echo "收到发生邮件的任务"; }else{ echo $result[1]; } }
然后
lpush stu:list1 send_email
monitor
- 输出当前执行的所有命令
- monitor
hincrby
- 自增哈西表student 中wl列的值
- hincrby student wl
hincrbyfloat
- 自增哈西表student 中xiaoming列的值
- hincrbyfloat student xiaoming
linsert
- before是在列表studentlist中找wl,并将pipi插在它前面。而after是插在后头
- linsert studentlist before wl pipi
或者
linsert student after wl pipi -
在某个元素之前或者之后插入新的元素,当然会先查找,如果有相同的元素的话,就插入在排在左边的前面或者后面.
如果没找到要查询的元素会返回-1
客户端使用
PHP:pedis
$result=Redis::linsert("studentlist","after","wl","pipi");
$result=Redis::linsert("studentlist","before","wl","pipi");
sadd
- 往集合中添加元素,但是没有重复的数据,添加完成会返回一添加成功的集合个数,如果添加的值在其中则不算
- sadd resultSet java php
-
可以理解为是一个没有值的 哈希类型,只有键
客户端使用
$result=Redis::sadd("stu:set","java","php","net");
只会返回成功添加的个数,如果值已经存在了则不算
srem
- 把元素从集合中删除,会返回删除成功的个数
- srem resultSet java php
-
客户端使用
PHP:pedis
$result=Redis::srem("stu:set","java","php");
会返回删除成功的个数
scard
- 返回集合中列表的个数
- scard resultSet
-
客户端使用
PHP:pedis
$result=Redis::scard("stu:set");
sismember
- 判断java在不在集合中,如果在就返回1 不在为0
- sismember resultSet java
-
客户端使用
PHP:pedis
$result=Redis::sismember("stu:set","java");
srandmember
- 随机从集合中找两人,默认找一个人
- srandmember resultSet 2
-
随机找出几个元素 但是不会删除
客户端使用
PHP:pedis
$result=Redis::srandmember("stu:set","2");
spop
- 随机取出两个元素,默认只取出一个
- spop resultSet 2
-
随机拉两个元素出来,不记得看的是哪本书了,这个随机性不是太好
客户端使用
PHP:pedis
$result=Redis::spop("stu:set",2);
smembers
- 返回列表中所有的元素
- smembers resultSet
-
客户端使用
PHP:pedis
$result=Redis::smembers("stu:set");
DEBUG SEGFAULT
-
能够立刻让redis 崩溃,模拟断电
- DEBUG SEGFAULT
-
直接命令行使用吧
ping
-
发送一个测试,看看服务器是否还活着
- ping
-
echo
-
输出一些数据,和linux的echo 一个意思
- echo java
-
Laravel
dd(Redis::echo("java"));
object idletime java
-
查看java 这个键空闲了多久,就是既没有被查询也没有被修改
- object idletime
-
Laravel predis
dd(Redis::object("idletime","studeng"));
slowlog
- 用来记录查询执行时间的日志系统
- slowlog
-
主要用来记录慢查询,和查询超时的吊问题,记录下来的日志是存在内存中的,所以快,但是不持久啊(使用save是无法保存日志的),建议定时读取日志,存到本地
配置项: slowlog-log-slower-than 100 查询超过100微秒就记录,1秒=一百万微秒
建议设置为1毫秒也就是 1000微秒config get slowlog-log-slower-than
config get slowlog-max-len
查看已经记录了多少条日志
slowlog len
查看这些日志
slowlog get
127.0.0.1:6379> slowlog get 1) 1) (integer) 53 2) (integer) 1579424643 //什么时候时间 3) (integer) 147 //耗时(微秒 1秒=1000毫秒=1000 000 微秒) 4) 1) "GET" //命令 2) "aix_cache:aix_category" 5) "127.0.0.1:33084" //客户端 6) ""
清空日志
slowlog reset
客户端使用
PHP pedis
dd(Redis::slowlog("get"));
dd(Redis::slowlog("len"));
mset
- 设置多个键
- mset java 123 php 456
-
客户端使用
PHP:Pedis
$result=Redis::mset(["java"=>"22","php"=>"22222"]);
mget
- 获取多个键
- mset java php
-
只进行了一次网络请求
如果获取的键不存在的话,会返回一个空值 (nil) 不同的客户端会进行转换
客户端使用
PHP:Pedis
$result=Redis::mget(["java","php"]);
incrby
- 自增键指定个数
- incrby java 3
-
第三个参数是具体自增的个数,如果没有则会报错
相似命令:
客户端使用
PHP:pedis
$result=Redis::incrby("post:1:total","3");
decrby
- 自减指定个数
- decrby php 3
-
如果键不存在会自动创建,最后会返回-3
已存在的键不可为字符串
客户端使用
PHP:pedis
$result=Redis::decrby("post:1:total","3");
incrbyfloat
- 自增浮点数
- incrbyfloat php3 1.222312323
-
第三个参数可以为整数或者小数,同样是可以不存在
redis5 以下版本中会出现以下情况
127.0.0.1:6379> set post:1:total 1 OK 127.0.0.1:6379> incrbyfloat post:1:total 3.11 "4.109999999999999"
相似命令:
客户端使用
PHP:pedis
$result=Redis::incrbyfloat("post:1:total","3.11");
getrange
- 获取部分字符串
- getrange php 0 2
-
客户端使用
PHP:pedis
$result=Redis::getrange("php","0","3");
参数说明
getrange key start end
lrem
- 删除list中的元素
- lrem stu:list 3 www
-
命令介绍
lrem key count value
count 是删除多少个元素,value 是删除名字为这些的元素(不支持模糊匹配)
如果有多个相同的元素
当count>0 的时候 从左往右删除,当count<0 从右往左删除 count==0 删除所有的
客户端使用
PHP:pedis
$result=Redis::lrem("stu:list","2","www");
ltrim
- 删除元素
- ltrim stu:list 1 3
-
除了下标1到3之间的元素,其他的全部删除
客户端使用
PHP:pedis
$result=Redis::ltrim("stu:list","1","3");
sinter
- 求出多个集合的交集
- sinter key [key...]
-
交集的意思就是 你有的我也有
使用场景
有多个兴趣爱好标签,这些标签中存储的都是用户id, 可以求出同时细化打篮球和打乒乓球的人,(但是只能是针对用户量小的情况下,多了就会出现bigkey了)
命令介绍
sinter key1 key2
客户端使用
PHP:pedis
$result=Redis::sinter("stu:set","stu:set1");
相似命令
sunion
- 求出多个集合的并集
- sunion stu:set1 stu:set2
-
并集就是你的和我的,合到一起,把重复的去除掉
客户端使用
PHP:pedis
$result=Redis::sunion("stu:set","stu:set1");
相似命令