Redis 命令速查
key
keys <pattern> 查询符合pattern的key的列表,支持通配符?和*
exists <key> 判断key是否存在,返回0或1
del <key> [<key> ...] 删除一个或多个key,返回删除的个数
type <key> 返回key的数据类型,包括string/list/hash/set/zset
字符串
set <key> <value> 给key赋值,字符串类型存储的最大容量是512M
setnx <key> <value> 当key不存在时,设置key的值,返回0/1表示是否设置成功,可以用作分布式锁
get <key> 获取key的值
append <key> <value> 在原值上追加
strlen <key> 获取字符串长度(字节)
incr <key> 给key的值增加1,key必须是整数,首次操作后结果是1
incrby/decrby <key> <value> 加减特定值,value必须是整数
decr <key> key的值减1,key必须是整数,首次操作后结果是-1
incrbyfloat <key> <value> key的值增加浮点数value
mget key [key ...] 同时获取多个key的值,在集群模式下,所有的key必须在同一个节点中
mset key1 value1 [key2 value2 ...] 同时设置多个key的值,同样必须保证所有key都在同一个节点
getbit <key> <offset> 位操作,读取offset位的bit值,如果offset超出实际长度则默认返回0
setbit <key> <offset> <value> 设置bit的新值,返回旧值。如果offset超过实际长度,前面的位置自动填充0
bitcount <key> [start] [end] 统计bit=1的个数,注意start和end表示byte的索引,而不是bit
bitop <op> <destkey> <key1> [key2 ...] 按位计算,op可取值为AND、OR、XOR、NOT
bitpos <key> 0/1 [start] [end] 获取指定范围内首个0或1的bit位置,start和end表示字节的索引,返回的是绝对位置,与起始字节无关
列表
在redis中列表类型是使用双向链表实现的,因此列表更适合作为队列或栈来使用,不适合随机存取。列表作为数组来访问时下标从0开始。
列表的最大长度是2^32-1
lpush/rpush <key> <value> [value ...] 从列表左侧/右侧增加元素,返回列表长度
lpop/rpop <key> 从列表左侧/右侧弹出元素
llen <key> 获取队列中元素的个数
lrange <key> <start> <end> 获取列表的start-end之间的片段,两端都包含。start或end为负数时表示从后向前查找,-1表示最后一个元素,下同
ltrim <key> <start> <end> 只保留选中的片段,其他删除,范围与lrange相同,区别是lrange不删除
lrem <key> <count> <value> 删除前count个值为value的元素,返回实际删除的个数。该命令根据count值的不同,会有不同的处理方式
- 当count>0时从列表左侧开始检测和删除
- 当count<0时从列表右侧开始删除,删除的数量是count的绝对值
- 当count=0时删除所有值为value的元素
rpoplpush <src> <dest> 从src列表右侧取出一个元素,放入dest列表左侧。这个操作是原子的。当src与dest相同时,相当于把队尾元素重新排到队首。
以下几个命令都是把列表当成数组来用,不推荐lindex <key> <index> 查询index位置的元素
lset <key> <index> <value> 设置index位置的元素值
linsert <key> before|after <where> <value> 列表从左到右查到where元素,再根据before或after把value插入到where的前面或后面。返回列表元素个数。
hash
hset <key> <field> <value> 设置key的一个字段值
hget <key> <field> 查询key的一个字段值
hmset <key> <field> <value> [field value ...] 设置多个字段值
hmget <key> <field> [field ...] 查询多个字段值
hgetall <key> 查询key的所有字段
hexists <key> <field> 判断字段是否存在
hsetnx <key> <field> <value> 当字段不存在时赋值
hincrby <key> <field> <value> 给字段增加value值
hdel <key> <field> [field ...] 删除字段
hkeys <key> 获key的所有字段名
hvals <key> 获取key的所有字段值
hlen <key> 获取key的字段数量
集合
集合的最大容量是2^32-1,内部是使用值为空的hash table数据结构来实现
sadd <key> <value> [value ...] 向集合中加入元素,返回成功加入的元素数量
srem <key> <value> [value ...] 删除一个或多个元素,返回删除成功的个数
smembers <key> 返回集合中所有元素
sismember <key> <value> 判断元素是否在集合中
sdiff <key1> <key2> [key3 ...] 计算差集,如果传入多个key,则先计算key1-key2,再计算(key1-key2)-key3
sinter <key1> <key2> [key3 ...] 计算交集
sunion <key1> <key2> [key3 ...] 计算并集
以上几个集合计算命令,都是直接返回计算结果,如果集合较大需注意返回值也会很大,可以使用下面几个命令来替换,把计算结果存储在dest中而不是直接返回
sdiffstore <dest> <key1> <key2> [key3 ...] 计算差集,并存储结果
sinterstore <dest> <key1> <key2> [key3 ...] 计算交集,并存储结果
sunionstore <dest> <key1> <key2> [key3 ...] 计算并集,并存储结果
scard <key> 返回集合元素个数
srandmember <key> [count] 随机从集合中获取元素
- 不指定count时取1个元素
- count>0时,取count个不重复的元素
- count<0时,取|count|个可重复的元素
spop <key> 从集合中随机弹出一个元素
有序集合
有序集合在集合的基础上,给每个元素都关联了一个score,除了正常集合操作外,还可以基于score来操作,例如获取score最高的前N个元素。
有序集合在实现上最复杂,占用内存也最多。使用的是hash表和跳跃表来实现。
zadd <key> <score> <member> [score member ...] 给集合中加入元素和分数,如果元素已存在则会替换分数。返回新加入的元素个数。分数可以是整数,也可以是浮点数,或+inf和-inf表示正无穷和负无穷
zscore <key> <member> 返回元素的分数
zrange/zrevrange <key> <start> <end> [withscores] 排序后返回索引从start到end之间的元素,两端都包含,0表示第一个元素,-1表示最后一个元素。zrange是从小到大排序,zrevrange是从大到小排序,返回值优先以分数来排序,如果分数相同,则按元素的字典顺序排序,若元素为中文,则按中文实际编码的字典顺序排序。时间复杂度为O(log n+m),n为有序集合的基数,m为返回的元素个数
zrangebyscore <key> <min> <max> [withscores] [limit <offset> <count>] 获取指定分数范围的元素,包含min和max,结果从小到大排序。如果希望分数不包含端点值,可以在分数前加上(符号,例如(80。分数支持+inf和-inf
上面两个命令默认不返回分数,如果需要返回分数需要加上withscores
zcount <key> <min> <max> 返回指定分数范围内的元素个数
zincrby <key> <score> <member> 给member原来的分数加上score值,返回更改后的分数,如果member不存在,默认原分数为0再执行操作
zcard <key> 获取集合中元素数量
zrem <key> <member> [member ...] 删除元素,返回删除成功的数量
zremrangebyrank <key> <start> <end> 按照排名范围删除元素,返回删除成功的数量。该命令删除的元素与zrange查询结果一致。
zremrangebyscore <key> <min> <max> 按分数删除元素,返回成功删除的数量。该命令删除的元素与zrangebyscore查询结果一致。
zrank/zrevrank <key> <member> 查询元素的正序/逆序排名(从小到大为正序)
zinterstore <dest> <numkeys> <key> [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX] 把numkeys个有序集合计算交集,并保存到dest中,返回交集的元素个数。默认情况下,交集的元素分数是参与计算的元素分数之和,也就是AGGREGATE SUM模式,可以指定为求最小值或最大值,或者通过WEIGHTS给每个key分配权重,计算式会把分数乘以权重再求和。类似的,求并集可以使用zunionstore命令
stream 5.0
管理命令
info [server | clients | memory | persistence | stats | replication | cpu | cluster | keyspace] 查询redis运行状态
slowlog get 查询耗时操作
相关配置
slowlog-log-slower-than 记录耗时操作的时间阈值,单位微秒(1e-6s)
slowlog-max-len 保存的耗时操作条数
主从复制
info replication 查询主从复制状态,例如本节点是master还是slave,复制偏移量等
slaveof <ip> <port> 把当前节点设置为指定节点的从数据库
slaveof no one 把当前节点设置为主库
集群 3.0
info cluster 查询集群状态
cluster nodes 查看集群节点
开启集群
cluster-enabled yes
需注意在集群模式下只能使用0号数据库
cluster meet <ip> <port> 在集群中添加节点,这个命令是发给新节点的,并指定集群中任意一个节点即可,当新老节点完成握手后,老节点会把新节点的信息通过Gossip协议通知给集群内的其他节点
cluster replicate <node-id> 把节点设置为指定节点的从数据库
cluster addslots <slot> [<slot> ...] 分配插槽给接收该命令的节点,该命令只作用于还未分配的插槽,否则会报错
cluster setslot <slot> node <node-id> 重新分配插槽,这个命令只是把插槽进行了迁移,并没有迁移key,这会导致数据丢失。因此需要额外的migrate命令对key进行迁移,详见slot迁移
注意
该命令也会导致迁移状态被清除
cluster setslot <slot> IMPORTING|MIGRATING|STABLE <node-id> 用于在插槽迁移过程中临时设置插槽状态,STABLE子命令用于清除状态,详见slot迁移
cluster slots 查询插槽分配情况,查询结果包含插槽的开始号码、结束号码、负责该插槽的主库和从库
cluster getkeysinslot <slot> <count> 查询slot包含哪些key,用count限定查询的数量
migrate <ip> <port> <key> <db> <timeout> [COPY] [REPLACE] key迁移,COPY表示不删除当前节点数据,只是复制副本,REPLACE表示如果目标节点存在同名的key则覆盖,ip和port指向目标节点
其他
ping 用于检测节点是否存活,成功则返回PONG
select <db-id> 切换数据库,redis默认支持16个数据库,从0开始编号,集群模式下只能使用0号数据库
flushall 清空所有数据,慎用