redis命令大全

不同数据结构操作对比

k-v hash list set zset
添加 set,mset hset,hmset lpush,rpush sadd zadd
删除 del del,hdel del,lrem,lpop,rpop srem,spop zrem,zpopmix,zpopmax
修改 set,append,setex hset,hmset lset zadd
查询 get,mget hget,hmget,hgetall lindex srandmember
范围查询 keys,scan hkeys,hvals lrange smembers zrange,zrevrange,zrangebylex
求长度 strlen hlen llen scard zcard
检查是否存在 exists hexists sismember
不存在才添加 setnx hsetnx lpushx

通用命令

命名 说明 例子
keys 查看指定指定通配符的key keys
keys key1
dbsize 返回整个数据库中key的数量
exists 判断指定key是否存在 exists key1
del 删除指定key,返回删除的个数 del key1
expire 设置在多长时间以后过期(秒) expire k1 10
expireat 设置在指定时间过期 expireat k1 时间戳
pexpire 设置多长时间以后过期(毫秒) pexpire k1 10000
pexpireat 设置在指定时间过期(毫秒) pexpire k1 时间戳(毫秒)
persist 取消设置的过期时间 persist k1
ttl 查询剩余过期 ttl k1
pttl 查询剩余过期(放回的毫秒) pttl k2
rename 重命名 rename k2 k1
randomkey 随机返回一个key
flushall 清空所有key
flushdb 清空当前数据库
type 查看value的类型 type k1

指定数据结构命令

键值类型
命令 说明 例子
setnx 如果不存在才添加 setnx k2 v2
set 添加,如果存在就覆盖 set k1 v1
setex 设置,vk的同时设置过期时间 setex k1 100 1
get 获取 get k2
mset 一次设置多个键值对 mset k1 v11 k2 v22
mget 一次获取多个键的值 mget k1 k2
del 删除 del k11
incr 自增(需要值是数字类型) incr k1
incrby 指定增加步长的自增(需要值是数字类型) incr k1 100
decr 自减(需要值是数字类型) decr k1
decrby 自减,指定步长(需要值是数字类型) decrby k1 100
strlen 返回值的长度(需要值是数字类型) strlen k1
append 在value后面追加 append k1 123
List数据类型
命令 说明 例子
lpush 从列表左边添加 lpush list1 1
rpush 从列表右边添加 rpush list1 2
lpop 从列表左边弹出一个元素 lpop list1
rpop 从列表右边弹出一个元素 lpop list1
llen 查看列表长度 llen list1
lrange 查看列表指定范围的元素 lrange list1 0 2
lrem 移除一定数量的元素 lrem list1 0 1
lindex 查看列表指定下标的元素 lindex list1 0
lset 修改列表指定下标的元素 lset list1 1 1
lpushx 只有集合存在的时候才会插入 lpushx list1 1
lmove 从一个移动到另外一个集合 LMOVE source destination RIGHT LEFT
ltrim 截取链表的一段,别的删除 ltrim list1 1 3
Hash类型

hash是两层KV,很多用法和VK类似,但是没有expire 没有 incr。

命令 说明 例子
hsetnx hash里面字段存在才能设置成功 hsetnx user1 name zhangsan
hset 设置字段的值,总是覆盖 hset user1 name zhangsan1
hget 得到字段的值 hget user1 name
hmset 一次设置多个字段的值 hmset user name name1 age 33 des des1
hmget 一次得到多个字段的值 hmget user1 name age des
hgetall 得到所有字段和值 hgetall user1
hkeys 得到所有字段 hkeys user1
hvals 得到所有值 hvals user1
hexists 判断字段是否存在 hexists user1
hlen 得到字段个数 hlen user1
hdel 删除指定字段 hdel user1 des
hincrby 字段的值自增长 hincrby user1 age 1
Set类型
命令 说明 例子
sadd 向set中添加一个元素 sadd set1 1
srem 从set中移除指定元素 srem set1 2
scard 查看set的当前长度 scard set1
smembers 查看set的所有元素 smembers set1
sismember 指定元素是否是存于set内 sismember set1 1
srandmember 随机返回2个元素,但是不从set中删除 srandmember set1 2
spop 随机返回1个元素,并且从set中删除 spop set1 1
Zset类型

没有zdecrby指令,zincrby可以传入负数

命令 说明 例子
zadd 向有序set里面添加一个元素 zadd z1 1 a
zrem 从有序集合里面移除指定元素 zrem z1 a
zscore 返回指定元素的评分 zscore z1 a
zincrby 返回指定元素的评分自增 zincrby z1 3 a
zcard 放回zset的长度 zcard z1
zrange 正序查看zset(按照下标) zrange z1 0 100
zrevrange 倒序查看zset zrevrange z1 0 100
zrank 查看指定元素的排行位置 zscore z1 a
zpopmin 弹出评分最小的几个 zpopmin z1 1
zpopmax 弹出评分最大的几个 zpopmax z1 1
zinterstore
zunionstore
zdiffstore
取交并差集,然后存到指定地方 zunionstore zdesc 2 z1 z2
zrangestore 把指定范围存到另一个key 中
zremrangebyscore
zremrangebyrank
zremrangebylex
三种批量移除,分别是通过评分范围,排序访问,和字典位置
zrangebylex 根据value的字典顺序查询 zrangebylex z1 [a (z limit 0 10
zrangebylex 按照分数查询 zrangebyscore z1 0 100
二进制类型
命令 说明 例子
setbit 修改指定位置的bit数据 setbit bl 100 1
getbit 查询指定bit位的数据 getbit bl 4
bitcount 得到1的数量 getcount bl
bitop bit的位运算,运算方式支持,与或非亦或 and or not xor bitop and rt bl b2

系统命令

命令 说明 例子
client list 查看连接列表 client list
client getname 查询当前连接名字
client setname 设置当前连接名字 client setname myConn
client kill ip:port 杀死指定的连接(client list里面可以看到连接ip:端口) client kill 192.168.110.1:6053
config get parameter 查询配置 config get requirepass
config set parameter value 修改配置 config set requirepass 123456
config resetstat 清除一些状态
flushdb 清空当前DB
flushall 清空当所有DB
info 查看服务器,客户端,持久化,状态,副本等信息
save 手动触发持久化
bgsave 后台保存 bgsave
lastsave 查看上一次save的时间
monitor 监控redis的操作,读写等操作会被控制台输出
slaveof host port 将当前服务器转变为指定服务器的从属服务器
slowlog len 查询有多少慢查询日志
slowlog get n 查询慢查询日志 slowlog get 10 (最近10条)
select 选择数据库 select 0
redis-cli -h xxx -p xxx 客户端登录远程服务器 redis-cli -h 192.168.1.66 t -p 6379
auth password 密码授权 auth 123456

发布订阅

redis的发布定于不支持持久化,是瞬时状态,建议用正常的mq

命名 说明 例子
publish cName 发布消息 publish top1 m1
subscribe cName 订阅一个渠道渠道消息 subscribe top1
unsubscribe cName 取消订阅消息 unsubscribe top1
pubsub channels 查看订阅渠道列表,只能看到渠道,有通配符的看不到 pubsub channels
pubsub channels *
pubsub numsub cName 查询指定渠道的定于数量 pubsub numsub top1
psubscribe pattern 订阅消息的时候支持通配符 psubscribe top*
unpsubscribe pattern 取消通配符格式订阅消息 unpsubscribe top*
pubsub numpat 查看有通配符的订阅数量 PUBSUB NUMPAT

通配符和scan的使用

语法:SCAN cursor [MATCH pattern] [COUNT count]

  • cursor - 游标。
  • pattern - 匹配的模式。
  • count - 指定每次遍历多少个集合或者说是slot。

redis存数据是hash结构的,类似hashMap的数组+ 链表。游标和count对应 hashmap的数组下标位置和向前遍历几个下标。返回游标不为0,但是返回的结果可能是没有数据,这是因为这一块区域没有数据。结束标志需要依赖游标为0为准。

scan 对不同数据结构有不同的命令,比如 sscan,hscan,zsan

用法:scan 0 match k* count 10
返回的第一行是游标,后面的是返回的数据,然后不停使用新的游标访问,直到游标为0

匹配不带就是所有都匹配,count 不指定默认是向前扫描10个位置。

> scan 0 count 10
9
chars
k2
bl
set1
k4
l1
DAILY_EXCHANGE_RATE
k8
user
zdesc
user1
> scan 9 count 10
0
k5
k3
rt
b2
k6
k7
z1

redis高位扩容

redis的cursor 不是单调增加的,是是因为redis的扩容hash槽的编号是高位递增,不是普通的低位递增。所以遍历过程会出现cursor 变小的情况。扩容高位递增是为了rehash的时候不会重复扫描已经扫描的slot。如果是正常的扩容新的slot会拍到最后面,高位扩容新的slot会放在之前的每个slot的旁边。

高位扩容是以下面的增长趋势。

|    0    |    2    |    1    |    3    |
| 0  | 4  |  2 |  6 |  1 | 5  | 3  | 7  |
|0|8 |4|12|2|10|6|14|1|9 |5|13|3|11|7|15|

低位扩容是这样

|    0    |    1    |    2    |    3    |
| 0  | 1  |  2 |  3 |  4 | 5  | 6  | 7  |
|0|1 |2|3|4|5|6|7|8|9 |10|11|12|13|14|15|

慢查询日志配置

慢查询日志指标参数
slowlog-log-slower-than:慢查询日志阈值,单位是毫秒,默认是10000毫秒
slowlog-max-len:最多记录多少条慢查询日志,默认128

> config get slowlog-log-slower-than
slowlog-log-slower-than
10000
> config get slowlog-max-len
slowlog-max-len
128

获取慢查询日志
查询慢查询日志条数:slowlog len
查询慢查询日志列表(默认是时间倒序的):slowlog get 10

> slowlog len
(integer) 10

> slowlog get 10
1) 1) "16"
   2) "1717072716"
   3) "43"
   4) 1) "info"
   5) "192.168.110.1:9128"
   6) "redisinsight-common-3032ed4d"
2) 1) "15"
   2) "1717072715"
   3) "1"
   4) 1) "ping"
   5) "192.168.110.1:6052"
   6) "vm66"
3) 1) "14"
   2) "1717072711"
   3) "60"
   4) 1) "info"
   5) "192.168.110.1:9128"
   6) "redisinsight-common-3032ed4d"
4) 1) "13"
   2) "1717072706"
   3) "64"
   4) 1) "info"
   5) "192.168.110.1:9128"
   6) "redisinsight-common-3032ed4d"
5) 1) "12"
   2) "1717072705"
   3) "1"
   4) 1) "ping"
   5) "192.168.110.1:6052"
   6) "vm66"
6) 1) "11"
   2) "1717072701"
   3) "50"
   4) 1) "info"
   5) "192.168.110.1:9128"
   6) "redisinsight-common-3032ed4d"
7) 1) "10"
   2) "1717072700"
   3) "3"
   4) 1) "slowlog"
      2) "len"
   5) "192.168.110.1:6038"
   6) "redisinsight-cli-3032ed4d-b2e2"
8) 1) "9"
   2) "1717072696"
   3) "51"
   4) 1) "info"
   5) "192.168.110.1:9128"
   6) "redisinsight-common-3032ed4d"
9) 1) "8"
   2) "1717072695"
   3) "1"
   4) 1) "ping"
   5) "192.168.110.1:6052"
   6) "vm66"
10) 1) "7"
   2) "1717072692"
   3) "60"
   4) 1) "info"
   5) "192.168.110.1:9128"
   6) "redisinsight-common-3032ed4d"

单条日志说明

1) 1) "16"                                      #日志序号
   2) "1717072716"                              #产生时间
   3) "43"                                      #耗时
   4) 1) "info"                                 #操作
   5) "192.168.110.1:9128"                      #客户端ip端口
   6) "redisinsight-common-3032ed4d"            #客户端名字   

posted on 2024-05-30 18:25  zhangyukun  阅读(53)  评论(0编辑  收藏  举报

导航