助记提要
- 字符串自增自减命令 5个
加减1;加减整值;加浮点值
- 字符串子串处理命令 3个
追加;范围取;范围改
- 字符串按位处理命令 4个
按位读;按位改;位计数;位运算
- 列表基本命令 7个
左右推;左右取;索引取;范围取;修剪
- 列表其他操作命令 4个
阻塞弹出;元素移动
- 集合基本命令 8个
添加;移除;存在判断;随机取;元素移动
- 集合运算命令 6个
交集;并集;差集;计算并保存到新键
- 散列命令 4个
取键值;设置键值;删除键值;计数
- 散列高级命令 6个
存在判断;取所有键、取所有值、取所有键值;值做增运算
- 有序集合基本命令 8个
添加;移除;取分值;改分值;取排名;计数
- 有序集合范围命令 6个
按排名范围取;按分值范围取;按排名范围移除;按分值范围移除
- 有序集合运算命令 2个
交集;并集
- 发布与订阅命令 5个
- Redis发布与订阅的缺点
第二部分 核心
3章 Redis命令
常用命令 排序命令 基本事务命令 过期时间命令
3.1 字符串
字符串可以存储字节串、整数、浮点数。
自增自减命令
存到字符串的值,如果能被解释为整数或浮点数,Redis会允许进行增减操作。
INCR/DECR key_name
使键值增加 / 减小1INCRBY/DECRBY key_name integer_value
使键值增加 / 减小指定整数INCRBYFLOAT key_name float_value
使键值增加指定的浮点数
在操作无法解释为数值或范围过大的键时,会发生错误。
操作不存在的键时,会把这个键当做0来操作。
处理子串和二进制位的命令
APPEND key_name value
把指定值 value 追加到键值末尾。
返回键值当前的总长度。GETRANGE key_name start end
获取键值从 start 到 end 范围的字符组成的子串,包括 start,end。
键值的第一位从 0 开始。SETRANGE key_name offset value
使用 value 覆盖键值从指定的 offset 往后的部分。
覆盖长度视 value 长度定。
返回键值当前的总长度。GETBIT key_name offset
键值视为二进制位串,返回 offset 位置的二进制位的值。SETBIT key_name offset value
键值视为二进制位串,把 offset 位置的二进制值改为 value。
返回该位置原先的二进制值。BITCOUNT key_name [start end]
统计键值(指定范围内)的二进制位串中值为1的数量。BITOP operation result_key_name key_name [key_name ...]
对一个或多个二进制位串执行位运算。
operation 可选操作有:并(AND),或(OR),异或(XOR),非(NOT)。
SETRANGE 和 SETBIT 操作的字符串长度不够时,Redis 会拿空字节填充。
3.2 列表
由多个字符串值组成的有序序列。
基本命令
RPUSH/LPUSH key_name value [value ...]
将一个或多个值推入列表右端(左端)。
返回操作后列表的长度。RPOP/LPOP key_name
移除并返回列表最右端(左端)的元素。LINDEX key_name offset
返回列表中偏移量为 offset 的元素。
offset 可以为负,表示倒着取。offset 超出列表长度,返回空。LRANGE key_name start end
返回 start 到 end 范围的元素,包括 start 和 end 位置的元素。
start 和 end 可以为负。LTRIM key_name start end
修剪列表,仅留下 start 到 end 范围的元素,start 和 end 位置的也会留下。
start 和 end 可以为负。
返回操作成功的提示。
阻塞式的弹出以及移动元素的命令
BLPOP/BRPOP key_name [key_name ...] timeout
从第一个非空的列表中弹出最左端(最右端)的元素。
如果都是空列表,就在 timeout 时间内阻塞并等待可弹出元素。
返回列表的 key_name 和弹出的元素。RPOPLPUSH source_key dest_key
弹出 source_key 列表最右端的元素,推到 dest_key 列表的最左端。
返回这个元素。BRPOPLPUSH source_key dest_key timeout
功能同 RPOPLPUSH。若 source_key 列表为空,在 timeout 秒等待可弹出元素。
3.3 集合
无序存储多个各不相同的元素。
基本命令
SADD key_name item [item ...]
把元素添加到集合。
返回成功添加的元素数目。SREM key_name item [item ...]
从集合移除元素。
返回移除的元素数目。SISMEMBER key_name item
查看元素是否在集合内。SCARD key_name
返回集合的元素数目。SMEMBERS key_name
返回集合包含的全部元素。SRANDMEMBER key_name [count]
从集合随机返回一个或多个元素。
count 为正,返回不重复的元素。count 为负,返回的元素可能重复。SPOP key_name
随机移除并返回集合的一个元素。SMOVE source_key dest_key item
从 source_key 移除 item,然后添加到 dest_key 中。
item 成功移除返回 1,否则返回 0。
组合和关联多个集合的命令
SDIFF key_name [key_name ...]
(差集)返回第一个集合有,其它集合没有的元素。SINTER key_name [key_name ...]
(交集)返回同时存在于所有集合的元素。SUNION key_name [key_name ...]
(并集)返回这些集合的并集元素。SDIFFSTORE/SINTERSTORE/SUNIONSTORE dest_key key_name [key_name ...]
将差集(交集、并集)结果保存到 dest_key 中,返回保存的元素个数。
3.4 散列
存储多个键值对
基本命令
HMGET key_name key [key ...]
从散列获取一个或多个键的值。HMSET key_name key value [key value ...]
为散列的一个或多个键设置值。HDEL key_name key [key ...]
删除一个或多个键值对。
返回删除成功的数目。HLEN key_name
返回散列中的键值对数量。
高级命令
HEXISTS key_name key
检查给定键是否在散列中。HKEYS/HVALS/HGETALL key_name
获取散列的所有键(值,键值对)。HINCRBY/HINCRBYFLOAT key_name key increment
把键存储的值加上整数(浮点数) increment。
散列包含的值很大时,一般先用HKEYS取出所有键,再使用HGET依次取出键的值。
3.5 有序集合
存储成员对应分值的数据,能对分值进行处理,能按分值大小有序地获取或扫描成员和分值。
常用命令
ZADD key_name score member [score member ...]
将带有指定分值的成员加到有序集合。ZREM key_name member [member ...]
从有序集合移除指定成员。返回移除的成员数量。ZINCRBY key_name increment member
将指定成员的分值增加 increment。ZSCORE key_name member
返回成员的分值。ZRANK key_name member
返回成员在有序集合中的排名。即按分值从小到大排序的成员索引。ZREVRANK key_name member
功能同 ZRANK,但是按分值从大到小排。ZCARD key_name
返回有序集合的成员数量。ZCOUNT key_name min max
返回分值介于 min 和 max 之间的数量。
范围操作命令
ZRANGE key_name start stop [WITHSCORES]
返回排名介于 start 和 stop 之间的成员。
带有 WITHSCORES 选项的话,分值会一起返回。ZRANGEBYSCORE key_name min max [WITHSCORES] [LIMIT offset count]
返回分值介于 min 和 max 之间的成员。ZREVRANGE key_name start stop [WITHSCORES]
功能同 ZRANGE,按分值从大到小排。ZREVRANGEBYSCORE
功能同 ZRANGEBYSCORE,按分值从大到小顺序返回。ZREMRANGEBYRANK key_name start stop
移除有序集合中排名介于 start 和 stop 之间的成员。ZREMRANGEBYSCORE key_name min max
移除有序集合中分值介于 min 和 max 之间的成员。
交集并集命令
ZINTERSTORE dest_key numkeys key_name [key_name ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
对多个有序集合执行类似集合交集的操作,把结果有序集合存在 dest_key 中。
可选聚合的方式,默认为 SUM,把各个成员的分值相加。
可以把集合当做参数传入,集合会被当做成员分值都是 1 的有序集合。ZUNIONSTORE dest_key numkeys key_name [key_name ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
对多个有序集合执行并集操作,把结果有序集合存在 dest_key 中。
3.6 发布与订阅
- 发布与订阅的特点
订阅者负责订阅频道,发送者负责向频道发送二进制消息。
当有消息发送到频道时,所有的订阅者都会收到消息。
发布与订阅命令
SUBSCRIBE channel [channel ...]
订阅一个或多个频道。UNSUBSCRIBE [channel [channel ...]]
退订一个或多个频道。未指定频道,则退订所有频道。PUBLISH channel message
向频道发一条消息。PSUBSCRIBE pattern [pattern ...]
订阅与指定模式匹配的全部频道。PUNSUBSCRIBE [pattern [pattern ...]]
退订指定模式的频道。未给定模式,则退订所有模式。
Redis发布与订阅的缺点
- 客户端只能收到订阅操作之后发布的消息。且客户端在执行订阅的过程中断线,就会丢失断线期间发布的所有消息。
- 发布消息时,会把消息推到每个客户端的连接缓冲区。如果消息过大或者客户端收取过慢,消息积压,缓冲区会越来越大,导致 Redis 变慢或崩溃。新版 Redis 可以调整参数 client-output-buffer-limit pubsub 来限制客户端缓冲区的大小,就没有这个问题。