阅读完需:约 6 分钟
列表
列表是 Redis 中另外一种数据类型。下面我们来看看列表中一些基本的操作命令。
LPUSH / lpush
将一个或多个值 value 插入到列表 key 的表头,如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头,如下:
1 2 |
127.0.0.1:6379> LPUSH k1 v1 v2 v3 (integer) 3 |
LRANGE / lrange
返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定,下标 (index) 参数 start 和 stop 都以 0 为底,即 0 表示列表的第一个元素,1 表示列表的第二个元素,以此类推。我们也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。如下:
1 2 3 4 |
127.0.0.1:6379> LRANGE k1 0 -1 1) “v3” 2) “v2” 3) “v1” |
RPUSH / rpush
RPUSH 与 LPUSH 的功能基本一致,不同的是 RPUSH 的中的 value 值是按照从右到左的顺序依次插入,如下:
1 2 3 4 5 6 7 8 |
127.0.0.1:6379> RPUSH k2 1 2 3 4 5 (integer) 5 127.0.0.1:6379> LRANGE k2 0 -1 1) “1” 2) “2” 3) “3” 4) “4” 5) “5” |
RPOP / rpop
RPOP 命令可以移除并返回列表 key 的尾元素。如下:
1 2 3 4 5 6 7 |
127.0.0.1:6379> RPOP k2 “5” 127.0.0.1:6379> LRANGE k2 0 -1 1) “1” 2) “2” 3) “3” 4) “4” |
LPOP / lpop
LPOP 和 RPOP 类似,不同的是 LPOP 移除并返回列表 key 的头元素,如下:
1 2 3 4 5 6 |
127.0.0.1:6379> LPOP k2 “1” 127.0.0.1:6379> LRANGE k2 0 -1 1) “2” 2) “3” 3) “4” |
LINDEX / lindex
LINDEX 命令可以返回列表 key 中,下标为 index 的元素,正数下标 0 表示第一个元素,也可以使用负数下标,-1 表示倒数第一个元素,如下:
1 2 3 4 |
127.0.0.1:6379> LINDEX k2 0 “2” 127.0.0.1:6379> LINDEX k2 -1 “4” |
LTRIM / ltrim
LTRIM 命令可以对一个列表进行修剪,即让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。下标与之前介绍的写法都一致,这里不赘述。如下:
1 2 3 4 5 6 7 8 9 |
127.0.0.1:6379> LRANGE k1 0 -1 1) “v3” 2) “v2” 3) “v1” 127.0.0.1:6379> LTRIM k1 0 1 OK 127.0.0.1:6379> LRANGE k1 0 -1 1) “v3” 2) “v2” |
BLPOP / blpop
BLPOP 是阻塞式列表的弹出原语。它是命令 LPOP 的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被 BLPOP 命令阻塞。当给定多个 key 参数时,按参数 key 的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。同时,在使用该命令时也需要指定阻塞的时长,时长单位为秒,在该时长内如果没有元素可供弹出,则阻塞结束。返回的结果是 key 和 value 的组合,如下:
1 2 3 4 5 6 |
127.0.0.1:6379> BLPOP k1 10 1) “k1” 2) “v2” 127.0.0.1:6379> BLPOP k1 10 (nil) (10.03s) |
最后,BRPOP、BPOPLPUSH、BRPOPLPUSH 都是相应命令的阻塞版本,这里就不赘述了。
集合
接下来我们来看看集合中一些常见的操作命令:
SADD / sadd
SADD 命令可以添加一个或多个指定的 member 元素到集合的 key 中,指定的一个或者多个元素 member 如果已经在集合 key 中存在则忽略,如果集合 key 不存在,则新建集合 key ,并添加 member 元素到集合 key 中。如下:
1 2 |
127.0.0.1:6379> SADD k1 v1 v2 v3 v4 (integer) 4 |
SREM / srem
SREM 命令可以在 key 集合中移除指定的元素,如果指定的元素不是 key 集合中的元素则忽略。如果 key 集合不存在则被视为一个空的集合,该命令返回 0 。如下:
1 2 3 4 |
127.0.0.1:6379> SREM k1 v2 (integer) 1 127.0.0.1:6379> SREM k1 v10 (integer) 0 |
SISMEMBER / sismember
SISMEMBER 命令可以返回成员 member 是否是存储的集合 key 的成员。如下:
1 2 |
127.0.0.1:6379> SISMEMBER k1 v3 (integer) 1 |
SCARD / scard
SCARD 命令可以返回集合存储的 key 的基数(集合元素的数量),如下:
1 2 |
127.0.0.1:6379> SCARD k1 (integer) 3 |
SMEMBERS / smembers
SMEMBERS 命令可以返回 key 集合所有的元素,如下:
1 2 3 4 |
127.0.0.1:6379> SMEMBERS k1 1) “v4” 2) “v1” 3) “v3” |
SRANDMEMBER / srandmember
SRANDMEMBER 仅需我们提供 key 参数,它就会随机返回 key 集合中的一个元素,从 Redis2.6 开始,该命令也可以接受一个可选的 count 参数,如果 count 是整数且小于元素的个数,则返回 count 个随机元素,如果 count 是整数且大于集合中元素的个数时,则返回集合中的所有元素,当 count 是负数,则会返回一个包含 count 的绝对值的个数元素的数组,如果 count 的绝对值大于元素的个数,则返回的结果集里会出现一个元素出现多次的情况。如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
127.0.0.1:6379> SRANDMEMBER k1 “v4” 127.0.0.1:6379> SRANDMEMBER k1 2 1) “v4” 2) “v1” 127.0.0.1:6379> SRANDMEMBER k1 5 1) “v4” 2) “v1” 3) “v3” 127.0.0.1:6379> SRANDMEMBER k1 -1 1) “v4” 127.0.0.1:6379> SRANDMEMBER k1 -5 1) “v3” 2) “v1” 3) “v1” 4) “v3” 5) “v3” |
SPOP / spop
SPOP 命令的用法和 SRANDMEMBER 类似,不同的是,SPOP 每次选择一个随机的元素之后,该元素会出栈,而 SRANDMEMBER 则不会出栈,只是将该元素展示出来。
SMOVE / smove
SMOVE 命令可以将 member 从 source 集合移动到 destination 集合中,如下:
1 2 3 4 5 6 7 |
127.0.0.1:6379> SMOVE k1 k2 v1 (integer) 1 127.0.0.1:6379> SMEMBERS k1 1) “v4” 2) “v3” 127.0.0.1:6379> SMEMBERS k2 1) “v1” |
SDIFF / sdiff
SDIFF 可以用来返回一个集合与给定集合的差集的元素,如下:
1 2 3 |
127.0.0.1:6379> SDIFF k1 k2 1) “v4” 2) “v3” |
k1 中的元素是 v3、v4,k2 中的元素是 v1,差集就是 v3、v4.
SDIFFSTORE / sdiffstore
SDIFFSTORE 命令与 SDIFF 命令基本一致,不同的是 SDIFFSTORE 命令会将结果保存在一个集合中,如下:
1 2 3 4 5 |
127.0.0.1:6379> SDIFFSTORE key k1 k2 (integer) 2 127.0.0.1:6379> SMEMBERS key 1) “v4” 2) “v3” |
SINTER / sinter
SINTER 命令可以用来计算指定 key 之间元素的交集,如下:
1 2 3 4 5 6 7 8 |
127.0.0.1:6379> SMEMBERS k1 1) “v4” 2) “v3” 127.0.0.1:6379> SMEMBERS k2 1) “v1” 2) “v3” 127.0.0.1:6379> SINTER k1 k2 1) “v3” |
SINTERSTORE / sinterstore
SINTERSTORE 命令和 SINTER 命令类似,不同的是它会将结果保存到一个新的集合中,如下:
1 2 3 4 |
127.0.0.1:6379> SINTERSTORE k3 k1 k2 (integer) 1 127.0.0.1:6379> SMEMBERS k3 1) “v3” |
SUNION / sumion
SUNION 可以用来计算两个集合的并集,如下:
1 2 3 4 |
127.0.0.1:6379> SUNION k1 k2 1) “v4” 2) “v1” 3) “v3” |
SUNIONSTORE / sunionstore
SUNIONSTORE 和 SUNION 命令类似,不同的是它会将结果保存到一个新的集合中,如下:
1 2 3 4 5 6 |
127.0.0.1:6379> SUNIONSTORE k4 k1 k2 (integer) 3 127.0.0.1:6379> SMEMBERS k4 1) “v4” 2) “v1” 3) “v3” |