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 阅读(92) 评论(0) 收藏 举报
浙公网安备 33010602011771号