Redis-Set常用命令

223 阅读4分钟

1. sadd key value.... 添加

  • 添加一个或多个指定的member元素到集合的 key中. 指定的一个或者多个元素member
  • 如果已经在集合key中存在则忽略.
  • 如果集合key 不存在,则新建集合key,并添加member元素到集合key中.
  • 如果key 的类型不是集合则返回错误. 返回新成功添加到集合里元素的数量,不包括已经存在于集合中的元素.

2.4: 接受多个member 参数. Redis 2.4 以前的版本每次只能添加一个member元素.

127.0.0.1:6379> sadd set key1 key2 key3
(integer) 3
127.0.0.1:6379> sadd set key1
(integer) 0
127.0.0.1:6379> smembers set
1) "key3"
2) "key1"
3) "key2"
127.0.0.1:6379> 

2. smembers 返回key集合所有的元素

3. SISMEMBER key member 判断成员是否存在

返回成员 member 是否是存储的集合 key的成员.

  • 如果member元素是集合key的成员,则返回1
  • 如果member元素不是key的成员,或者集合key不存在,则返回0
127.0.0.1:6379> smembers set
1) "key3"
2) "key1"
3) "key2"
127.0.0.1:6379> sismember set key4
(integer) 0
127.0.0.1:6379> sismember set key3
(integer) 1

4. scard key 返回元素总数

返回集合存储的key的基数 (集合元素的数量).

返回值 integer-reply: 集合的基数(元素的数量),如果key不存在,则返回 0.

127.0.0.1:6379> scard set
(integer) 3

5.srem key member 移除指定元素

在key集合中移除指定的元素. 如果指定的元素不是key集合中的元素则忽略 如果key集合不存在则被视为一个空的集合,该命令返回0.

如果key的类型不是一个集合,则返回错误.

返回值 integer-reply:从集合中移除元素的个数,不包括不存在的成员.

历史:= 2.4: 接受多个 member 元素参数. Redis 2.4 之前的版本每次只能移除一个元素.

127.0.0.1:6379> srem set key4
(integer) 0
127.0.0.1:6379> srem set key3
(integer) 1
127.0.0.1:6379> scard set
(integer) 2
127.0.0.1:6379> smembers set
1) "key1"
2) "key2"

6. spop key [count] 随机删除

从存储在key的集合中移除并返回一个或多个随机元素

count参数将在更高版本中提供,但是在2.6、2.8、3.0中不可用

如果count大于集合内部的元素数量,此命令将会返回整个集合,不会有额外的元素。

127.0.0.1:6379> spop set
"key2"
127.0.0.1:6379> spop set
"key3"
127.0.0.1:6379> spop set 3
1) "key1"

7. srandmember key [count] 随机返回元素

与spop相似但不移除 Redis 2.6开始,可以接受 count 参数。

  • 如果count是整数且小于元素的个数,返回含有 count 个不同的元素的数组。
  • 如果count是个整数且大于集合中元素的个数时,仅返回整个集合的所有元素
  • 当count是负数,则会返回一个包含count的绝对值的个数元素的数组,
  • 如果count的绝对值大于元素的个数,则返回的结果集里会出现一个元素出现多次的情况.

当count参数的值为负数时,提取操作就像在每次提取后,重新将取出的元素放回包里一样,因此,可能返回重复的元素,以及总是会返回我们请求的数量的元素

127.0.0.1:6379> smembers set
1) "key3"
2) "key1"
3) "key2"
127.0.0.1:6379> srandmember set
"key2"
127.0.0.1:6379> srandmember set
"key1"
127.0.0.1:6379> srandmember set
"key3"
127.0.0.1:6379> srandmember set 2
1) "key1"
2) "key3"
127.0.0.1:6379> srandmember set 2
1) "key3"
2) "key2"

8. SMOVE source destination member 移动元素到另一个集合

将member从source集合移动到destination集合中

  • 如果source 集合不存在或者不包含指定的元素,这smove命令不执行任何操作并且返回0.否则对象将会从source集合中移除,并添加到destination集合中去
  • 如果destination集合已经存在该元素,则smove命令仅将该元素充source集合中移除.
  • 如果source 和destination不是集合类型,则返回错误.
127.0.0.1:6379> smove set list key1
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> sadd set key1 key2 key3
(integer) 3
127.0.0.1:6379> sadd set2 key3
(integer) 1
127.0.0.1:6379> smove set set2 key3
(integer) 1
127.0.0.1:6379> smembers set
1) "key1"
2) "key2"
127.0.0.1:6379> smembers set2
1) "key3"

9. 并,差,交

  • SUNION key [key ...] 返回给定的多个集合的并集中的所有成员.
  • SDIFF key [key ...] 返回一个集合与给定集合的差集的元素.
  • SINTER key [key ...] 返回指定所有的集合的成员的交集.
  • SINTERSTORE destination key [key ...] 与SINTER命令类似, 将结果保存在 destination集合中.如果destination 集合存在, 则会被重写.
127.0.0.1:6379> sadd a 1 2 3  4 5 6
(integer) 6
127.0.0.1:6379> sadd b 1 2 3  7 8 9
(integer) 6
127.0.0.1:6379> sunion a b
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> sdiff a b
1) "4"
2) "5"
3) "6"
127.0.0.1:6379> sinter a b
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> sinterstore c a b
(integer) 3
127.0.0.1:6379> smembers c
1) "1"
2) "2"
3) "3"
127.0.0.1:6379>