3.redis命令(中)

235 阅读10分钟

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]的所有元素。