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) 编辑 收藏 举报