Redis集合类型

简介

集合和列表有很多相似的地方 但是很容易将他们区分开 集合的元素有唯一性 而且元素是无序的。集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等。最方便的是多个集合类型键之间还可以进行并集、交集和差集运算

环境

软件名称 版本号 下载地址
redis 3.2.0 点击下载

步骤

常用命令

下面将详细说明操作Redis集合类型的相关命令

增加和删除元素

1
2
SADD key member [member ...]        # 向一个集合添加元素
SREM key member [member ...] # 从一个集合删除元素
127.0.0.1:6379> SADD num 1 2 2 3
(integer) 3
127.0.0.1:6379> SREM num 1 1 2
(integer) 2
127.0.0.1:6379>

SADD执行成功会返回添加成功的个数 因为2相同 所以只有一个被添加 SREM也同样 返回被成功删除的个数

获取集合内所有元素

1
SMEMBERS num            # 获取集合内所有元素
127.0.0.1:6379> SMEMBERS num
1) "3"
127.0.0.1:6379> SADD num 2 2
(integer) 1
127.0.0.1:6379> SMEMBERS num
1) "2"
2) "3"

可以看到 num中只剩下3了 而且添加两个元素2 最后num中也只有一个2

判断元素是否在集合中

1
SISMEMBER num 2         # 判断元素是否在集合中
127.0.0.1:6379> SISMEMBER num 2
(integer) 1
127.0.0.1:6379> SISMEMBER num 1
(integer) 0
127.0.0.1:6379>

如果命中了 则返回1 否则返回0

集合运算

1
2
3
SDIFF key1 [key2 ...]           # 计算差集
SINTER key1 [key2 ...] # 计算交集
SUNION key1 [key2 ...] # 计算并集
SDIFF计算多个集合的差集 会想计算key1与key2的差集 然后将这个结果与key3继续计算 交集并集也同理

127.0.0.1:6379> SADD num1 1 2 3
(integer) 3
127.0.0.1:6379> SADD num2 2 3 4
(integer) 3
127.0.0.1:6379> SDIFF num1 num2
1) "1"
127.0.0.1:6379> SDIFF num2 num1
1) "4"
127.0.0.1:6379>

num1与num2的差集运算表示属于num1 且不属于num2的元素 反之亦然

127.0.0.1:6379> SINTER num1 num2
1) "2"
2) "3"
127.0.0.1:6379>

SINTER 计算num1和num2的交集 

127.0.0.1:6379> SUNION num1 num2
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379

SUNION 计算num1和num2的合集

获取集合中元素个数

1
SCARD key               # 获取集合中元素个数
127.0.0.1:6379> SMEMBERS num1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SCARD num1
(integer) 3
127.0.0.1:6379>

SCARD 返回一个集合中元素个数

存储集合运算后的结果

1
2
3
SDIFFSTORE dest key [key …]          # 将差集运算的结果保存为dest
SINTERSTORE dest key [key …] # 将交集运算的结果保存为dest
SUNIONSTORE dest key [key …] # 将并集运算的结果保存为dest
127.0.0.1:6379> SUNIONSTORE all num1 num2
(integer) 4
127.0.0.1:6379> SMEMBERS all
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379>

和SDIFF唯一区别就是不将结果返回 而是将结果保存为新的集合 只返回新集合元素个数 其余两个道理相同

随机获得集合中的元素

1
SRANDMEMBER key [count]         # 随机获得集合中的元素
count非必选项 用于每次获取多少个随机元素 count的正负体现的意义也不同 
count > 0 时 随机获取count个元素 但是元素不会出现重复获取的情况 也就是都是唯一的
count < 0 时 随机获取count的绝对值个元素 元素可能被重复获取 
如果count的值大于集合中的元素个数 则SRANDMEMBER会返回集合中的全部元素

127.0.0.1:6379> SRANDMEMBER all 
"1"
127.0.0.1:6379> SRANDMEMBER all 
"2"
127.0.0.1:6379> SRANDMEMBER all 6
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> SRANDMEMBER all -6
1) "2"
2) "1"
3) "1"
4) "3"
5) "2"
6) "2"
127.0.0.1:6379>

从集合中弹出一个元素

1
SPOP key            # 从集合中弹出一个元素
127.0.0.1:6379> SPOP all
"4"
127.0.0.1:6379> SMEMBERS all
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SPOP all
"1"
127.0.0.1:6379> SMEMBERS all
1) "2"
2) "3"
127.0.0.1:6379>

由于集合是无序的 所以SPOP会随机弹出一个值

附录

命令总结

SADD key member [member ...]            向一个集合添加元素
SREM key member [member ...]            从一个集合删除元素
SMEMBERS num                            获取集合内所有元素
SISMEMBER num 2                         判断元素是否在集合中
SDIFF key1 [key2 ...]                   计算差集
SINTER key1 [key2 ...]                  计算交集
SUNION key1 [key2 ...]                  计算并集
SCARD key                               获取集合中元素个数
SDIFFSTORE dest key [key …]             将差集运算的结果保存为dest
SINTERSTORE dest key [key …]            将交集运算的结果保存为dest
SUNIONSTORE dest key [key …]            将并集运算的结果保存为dest
SRANDMEMBER key [count]                 随机获得集合中的元素
SPOP key                                从集合中弹出一个元素