3.5 List 型 Value 操作命令
Redis 存储数据的 Value 可以是一个 String 列表类型数据。即该列表中的每个元素均为 String 类型数据。列表中的数据会按照插入顺序进行排序。列表的底层是一个无头节点的双向链表,所以对列表表头与表尾的操作性能较高,但对中间元素的插与删除 的操作的性能相对较差。
3.5.1 lpush/rpush
格式:LPUSH key value [value ...] 或 RPUSH key value [value ...]
将一个或多个值 value 插入到列表 key 的表头/表尾。如果 key 不存在,一个空列表会被创建并执行操作。当 key 存在但不是列表类型时,返回一个 错误。执行成功时返回列表的长度。
3.5.2 llen
格式:LLEN key 返回列表key的长度,不存在则返回0,不是列表类型则返回错误
3.5.3 lindex
格式:LINDEX key index
返回列表 key 中,下标为 index 的元素。列表从 0 开始计数。如果 index 不在列表的区间范围内,返回 nil 。
3.5.4 lset
格式:LSET key index value
将列表 key 下标为 index 的元素的值设置为 value。
当 index 超出范围,或对一个空列表(key 不存在)进行 LSET 时,返回一个错误。
3.5.5 lrange
格式:LRANGE key start stop
返回列表 key 中指定区间[start, stop]内的元素。可以使用负数下标。
超出范围的下标值不会引起错误。如果 start 下标比列表的最大下标还要大,返回一个空列表。如果 stop 下标比最大下标还要大,Redis 将 stop 的值设置为最大下标。
3.5.6 lpushx 与 rpushx
格式:LPUSHX key value 或 RPUSHX key value
将值 value 插入到列表 key 的表头/表尾,当且仅当 key 存在并且是一个列表。输出表的长度
3.5.7 linsert
格式:LINSERT key BEFORE|AFTER pivot value
将值 value 插入到列表 key 当中,位于元素 pivot 之前或之后。
当 pivot 不存在时,返回-1;当 key 不存在时, key 被视为空列表,返回 0;如果 key 不是列表类型,返回一个错误; 如果命令执行成功,返回列表的长度。
3.5.8 lpop / rpop
格式:LPOP key [count] 或 RPOP key [count]
从列表 key 的表头/表尾移除 count 个元素,并返回移除的元素。count 默认值 1。key不存在时返回nil
3.5.9 blpop / brpop
格式:BLPOP key [key ...] timeout 或 BRPOP key [key ...] timeout
BLPOP/BRPOP 是列表的阻塞式弹出命令。当给定列表内没有任何元素可供弹出时,连接将被阻塞,直到等待 timeout 超时或发现可弹出元素为止。timeout 为阻塞时长,单位为秒,其值若为 0,则表示只要没有可弹出元素,则一直阻塞。
说明:假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。反之,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。
3.5.10 rpoplpush
格式:RPOPLPUSH source destination
在一个原子时间内,执行以下两个动作:
- 将列表 source 中的最后一个元素弹出,并返回给客户端。
- 将 source 弹出的元素插入为列表 destination 的头元素。 如果 source 不存在,返回nil。
3.5.11 brpoplpush
格式:BRPOPLPUSH source destination timeout
阻塞版本,当给定列表 source 不为空时,表现和 RPOPLPUSH 一样。 为空时, BRPOPLPUSH 命令将阻塞连接,直到等待超时,或有另一个客户端对 source 执行插入命令。
说明:和上一个阻塞式命令类似,返回的列表是被弹出元素的值和等待时长。
3.5.12 lrem
格式:LREM key count value
根据 count 的值,移除列表中与 value 相等的元素。count 的值可以是以下几种:
- count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
- count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 -count。
- count = 0 : 移除表中所有与 value 相等的值。
返回被移除元素的数量。当 key 不存在时,返回 0 。
3.5.13 ltrim
格式:LTRIM key start stop
,让列表只保留指定区间内的元素。
当 key 不是列表类型时,返回一个错误。如果 start 比列表的最大下标 end 还要大,或者 start > stop ,返回一个空列表,因为 LTRIM 已经将整个列表清空。 如果 stop 比 end 下标还要大,Redis 将 stop 的值设置为 end 。
3.6 Set 型 Value 操作命令
Redis 存储数据的 Value 可以是一个 Set 集合,且集合中的每一个元素均 String 类型。Set 与 List 非常相似,但不同之处是 Set 中的元素具有无序性与不可重复性。
3.6.1 sadd
格式:SADD key member [member ...]
将一个或多个 member 加入到集合 key 当中,已经存在于集合的 member 将被忽略。
假如 key 不存在,则创建一个只包含 member 作成员的集合。当 key 不是集合类型时,返回一个错误。
3.6.2 smembers
格式:SMEMBERS key
返回集合 key 中的所有成员。不存在的 key 被视为空集合。若 key 中包含大量元素,则该命令可能会阻塞 Redis 服务。所以生产环境中一般使用 sscan 命令代替。
3.6.3 scard
格式:SCARD key
返回 Set 集合的长度, key不存在时返回0
3.6.4 sismember
格式:SISMEMBER key member
判断 member 元素是否集合 key 的成员。是则返回1,其他情况返回0
3.6.5 smove
格式:SMOVE source destination member
将 member 从 source 集合移动到 destination 集合。
如果 source 集合不存在或不包含指定的 member 元素,则返回 0 。否则 member 从 source 集合中被移除,并添加到 destination 集合,返回 1。当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除。当 source 或 destination 不是集合类型时,返回一个错误。
3.6.7 srandmember
格式:SRANDMEMBER key [count]
返回集合中的 count 个随机元素。count 默认值为 1
如果 count 大于等于集合长度,返回整个集合。如果 count 为负数,返回一个包含 count 绝对值个元素的数组,但数组中的元素可能会出现重复。
3.6..8 spop
格式:SPOP key [count]
移除并返回集合中的 count 个随机元素。count 必须为正数,且默认值为 1。
3.6..9 sdiff / sdiffstore
格式:SDIFF key [key ...] 或 SDIFFSTORE destination key [key ...]
返回第一个集合与其它集合之间的差集。
sdiffstore 显示差集,并差集存储到指定的集合 destination 中。如果 destination 集合已经存在,则将其覆盖。不存在的 key 被视为空集。
3.6.10 sinter / sinterstore
格式:SINTER key [key ...] 或 SINTERSTORE destination key [key ...]
返回多个集合间的交集。
sinterstore 显示交集,并交集存储到指定的集合 destination 中。如果 destination 集合已经存在,则将其覆盖。不存在的 key 被视为空集。
3.6.11 sunion / sunionstore
格式:SUNION key [key ...] 或 SUNIONSTORE destination key [key ...]
返回多个集合间的并集。并集,union。
sunionstore 显示交集,并交集存储到指定的集合 destination 中。如果 destination 集合已经存在,则将其覆盖。不存在的 key 被视为空集。
3.7有序 Set 型 Value 操作命令
Redis 存储数据的 Value 可以是一个有序 Set,其每个元素均 String 类型。有序 Set 中的每一个元素都有一个分值 score,Redis 根据 score 对集合进行由小到大的排序,score 可以重复。由于该类型的所有命令均是字母 z 开头,所以该 Set 也称为 ZSet。
3.7.1 zadd
格式:ZADD key score member [[score member] [score member] ...]
将一个或多个 member 及其 score 加入有序集 key 中的适当位置。
score 可以是整数值或双精度浮点数。如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。当 key 存在但不是有序集类型时,返回一个错误。如果命令执行成功,则返回被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。 若写入的 member 值已经存在,但 score 值不同,则新的 score 值将覆盖老 score。
3.7.2 zrange 与 zrevrange
格式:ZRANGE key start stop [WITHSCORES] 或 ZREVRANGE key start stop [WITHSCORES]
返回有序集 key 中,指定区间内的成员。zrange 命令会按 score 值递增排序, zrevrange命令会按score递减排序。具有相同 score 值的成员按字典序/逆字典序排列。 可以通过使用 WITHSCORES 选项,来让成员和它的 score 值一并返回。
可以使用负数下标。超出范围的下标不会引起错误。start 的值比有序集的最大下标还要大,或 start > stop 时,返回空列表。再比如 stop 的值比有序集的最大下标还要大,Redis 将 stop 当作最大下标来处理。 若 key 中指定范围内包含大量元素,则该命令可能会阻塞 Redis 服务。所以生产环境中如果要查询有序集合中的所有元素,一般使用 zscan 命令代替。
3.7.3 zrangebyscore 与 zrevrangebyscore
格式:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
返回有序集 key 中,所有 score 值介于 [min, max]的成员。有序集成员按 score 值递增/递减次序排列。具有相同 score 值的成员按 字典序/逆字典序排列。可选的 LIMIT 参数指定返回结果的数量及区间,当 offset 很大时,定位 offset 的操作可能需要遍历整个有序集,此过程效率可能会较低。可选的 WITHSCORES 参数决定结果集是单单返回有序集的成员,还是将有序集成员及其 score 值一起返回。
可以通过给参数前增加左括号“(”来使用可选的开区间。
3.7.4 zcard
格式:ZCARD key
返回集合的长度,key不存在时返回0
3.7.5 zcount
格式:ZCOUNT key min max
返回有序集 key 中,score 值在 [min,max] 之间的成员的数量。
3.7.6 zscore
格式:ZSCORE key member
返回有序集 key 中,成员 member 的 score 值。如果member或key不存在返回nil
3.7.7 zincrby
格式:ZINCRBY key increment member
为有序集 key 的 member 的 score 值加上增量 increment 。increment 可以是整数值或双精度浮点数。
当 key 不存在或 member 不是 key 的成员时, 命令等同于 ZADD key increment member 。当 key 不是有序集类型时,返回一个错误。命令执行成功,则返回 member 成员的新 score 值。
3.7.8 zrank 与 zrevrank
格式:ZRANK key member 或 ZREVRANK key member
返回有序集 key 中 member 的排名。zrank 命令会按 score 值递增排序, zrevrank 命令会按 score 递减排序。
score 值最小的成员排名为 0 。如果 member 不是有序集 key 的成员,返回 nil 。
3.7.9 zrem
格式:ZREM key member [member ...]
移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。返回成功移除的数量
3.7.10 zremrangebyrank
格式:ZREMRANGEBYRANK key start stop
移除有序集 key 中,指定排名区间(闭区间)内的所有成员。可以使用负数。执行成功返回被移除成员的数量。
3.7.11 zremrangebyscore
格式:ZREMRANGEBYSCORE key min max
移除有序集 key 中,所有 score 值介于 [min, max]的成员。执行成功返回被移除成员的数量
3.7.12 zrangebylex
格式:ZRANGEBYLEX key min max [LIMIT offset count]
该命令仅适用于集合中所有成员都具有相同分值的情况。有序集合的元素会根据成员的字典序进行排序。返回给定集合中元素值介于 min 和 max 之间的成员。如果有序集合里面的成员带有不同的分值, 那么命令的执行结果与 zrange key 效果相同。
合法的 min 和 max 参数必须包含左小括号“(”或左中括号“[”,其中左小括号“(” 表示开区间, 而左中括号“[”则表示闭区间。min 或 max 也可使用特殊字符“+”和“-”, 分别表示正无穷大与负无穷大。
3.7.13 zlexcount
格式:ZLEXCOUNT key min max
该命令仅适用于集合中所有成员都具有相同score的情况。返回该集合中元素值本身介于 min 和 max 范围内的元素数量。
3.7.14 zremrangebylex
格式:ZREMRANGEBYLEX key min max
该命令仅适用于集合中所有成员都具有相同分值的情况。移除集合中元素值本身介于[min, max]的所有元素。