Redis从入门到入坟系列文章(五): 集合(Set)

今天来了解下Redis的Set这一数据类型。Set是String类型的无序集合。跟java中的Set类似,Redis的Set是一个无序且不能有重复元素的集合。

集合对象的编码可以是 intset 或者 hashtable:

intset编码的集合对象使用整数集合作为底层实现,集合对象包含的所有元素都被保存在整数集合里面;

hashtable编码的集合对象使用字典作为底层实现,字典的每个键都是一个字符串对象,每个字符串对象包含了一个集合元素,而字典的值全部被设置为NULL。

Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。集合中最大的成员数为 2的32次方 - 1 (4294967295, 每个集合可存储40多亿个成员)。

Set的主要应用:比如统计共同好友、利用其元素的唯一性来统计访问网站的所有独立ip等

接下来就了解下Set的一些常用命令:

1、SADD key member1 [member2...]:向集合添加一个或多个成员。

127.0.0.1:6379> SADD myset redis mongodb mysql oracle
(integer) 4

2、SCARD key:获取集合的成员数。

比如获取上面新增的myset:

127.0.0.1:6379> SCARD myset
(integer) 4

3、SMEMBERS key:返回集合中的所有成员。

还是继续操作查看myset:

127.0.0.1:6379> SMEMBERS myset
1) "oracle"
2) "mysql"
3) "mongodb"
4) "redis"

4、SISMEMBER key:判断 member 元素是否是集合 key 的成员。

如果是,返回1;如果不是返回0;

127.0.0.1:6379> SISMEMBER myset redis
(integer) 1
127.0.0.1:6379> SISMEMBER myset db2
(integer) 0

5、SRANDMEMBER key [count]:

只提供集合 key 参数时,返回一个元素;如果集合为空,返回 nil 。 如果提供了 count 参数,那么返回一个数组;如果集合为空,返回空数组。如果 count 大于等于集合基数,那么返回整个集合。

  • 如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素不会重复。如果 count 大于等于集合基数,那么返回整个集合。
  • 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。
127.0.0.1:6379> SADD myset one two three
(integer) 3
127.0.0.1:6379> SRANDMEMBER myset 1
1) "one"
127.0.0.1:6379> SRANDMEMBER myset 2
1) "one"
2) "two"
127.0.0.1:6379> SRANDMEMBER myset
"two"
127.0.0.1:6379> SRANDMEMBER myset 3
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> SRANDMEMBER myset 4
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> SRANDMEMBER myset -3
1) "one"
2) "two"
3) "two"
127.0.0.1:6379> SRANDMEMBER myset -4
1) "one"
2) "one"
3) "one"
4) "two"
127.0.0.1:6379> SRANDMEMBER myset2 2
(empty list or set)
127.0.0.1:6379> SRANDMEMBER myset2
(nil)
127.0.0.1:6379> SRANDMEMBER myset2 -3
(empty list or set)

6、SPOP key [count]:移除并返回集合中的一个随机元素。

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

127.0.0.1:6379> SMEMBERS myset
1) "oracle"
2) "mysql"
3) "mongodb"
4) "redis"
127.0.0.1:6379> SPOP myset 1
1) "mysql"
127.0.0.1:6379> SMEMBERS myset
1) "oracle"
2) "mongodb"
3) "redis"

7、SSCAN key cursor [MATCH pattern] [COUNT count]:用于迭代集合中键的元素。

Sscan 继承自 Scan,所以用法跟Scan类似。

127.0.0.1:6379> SMEMBERS myset
1) "one"
2) "three"
3) "two"
127.0.0.1:6379> SSCAN myset 0 MATCH t*
1) "0"
2) 1) "three"
   2) "two"

8、SDIFF key1 [key2]:返回第一个集合与其他集合之间的差异。

127.0.0.1:6379> SADD key1 a b c d
(integer) 4
127.0.0.1:6379> SADD key2 b d e
(integer) 3
127.0.0.1:6379> SDIFF key1 key2
1) "c"
2) "a"
127.0.0.1:6379> SADD key3 c d e
(integer) 3
127.0.0.1:6379> SDIFF key1 key2 key3
1) "a"

9、SDIFFSTORE key key1 [key2...]:返回给定所有集合的差集并存储在 key 中。

127.0.0.1:6379> SDIFFSTORE dkey key1 key2 key3
(integer) 1
127.0.0.1:6379> SMEMBERS dkey
1) "a"
127.0.0.1:6379>

10、SINTER key1 [key2...]:返回给定所有集合的交集。

127.0.0.1:6379> SADD key1 a b c d
(integer) 4
127.0.0.1:6379> SADD key2 a c d e
(integer) 4
127.0.0.1:6379> SADD key3 a d e f
(integer) 4
127.0.0.1:6379> SINTER key1 key2 key3
1) "d"
2) "a"

11、SINTERSOTRE key key1 [key2...]:返回给定所有集合的交集并存储在 key 中。

127.0.0.1:6379> SADD key1 a b c d
(integer) 4
127.0.0.1:6379> SADD key2 a c d e
(integer) 4
127.0.0.1:6379> SADD key3 a d e f
(integer) 4
127.0.0.1:6379> SINTERSTORE dkey key1 key2 key3
(integer) 2
127.0.0.1:6379> SMEMBERS dkey
1) "a"
2) "d"

12、SMOVE source destination member:将 member 元素从 source 集合移动到 destination 集合。

如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去。

当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除。

127.0.0.1:6379> SADD skey1 three four five
(integer) 3
127.0.0.1:6379> SADD skey2 one two
(integer) 2
127.0.0.1:6379> SADD skey1 three four five
(integer) 3
127.0.0.1:6379> SMOVE skey1 skey2 four
(integer) 1
127.0.0.1:6379> SMEMBERS skey1
1) "five"
2) "three"
127.0.0.1:6379> SMEMBERS skey2
1) "one"
2) "two"
3) "four"

13、SREM key member1 [member2...]:移除集合中一个或多个成员

SREM 命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略

127.0.0.1:6379> SMEMBERS skey2
1) "one"
2) "two"
3) "four"
127.0.0.1:6379> SREM skey2 one four
(integer) 2
127.0.0.1:6379> SMEMBERS skey2
1) "two"

14、SUNION key1 [key2...]:返回所有给定集合的并集

127.0.0.1:6379> SADD key1 a b c
(integer) 3
127.0.0.1:6379> SADD key2 a e f
(integer) 3
127.0.0.1:6379> SADD key3 c g h
(integer) 3
127.0.0.1:6379> SUNION key1 key2 key3
1) "f"
2) "g"
3) "c"
4) "a"
5) "e"
6) "h"
7) "b"

15、SUNIONSTORE destination key [key ...]:所有给定集合的并集存储在 destination 集合中。

127.0.0.1:6379> SADD key1 a b c
(integer) 3
127.0.0.1:6379> SADD key2 a e f
(integer) 3
127.0.0.1:6379> SADD key3 c g h
(integer) 3
127.0.0.1:6379> SUNIONSTORE skey key1 key2 key3
(integer) 7
127.0.0.1:6379> SMEMBERS skey
1) "f"
2) "g"
3) "c"
4) "a"
5) "e"
6) "h"
7) "b"

今日小结:

今天主要介绍了Redis的集合这一数据类型以及常用的一些命令,用好Redis,掌握这些命令还是很重要的。每天学习一点点,每天进步一点点,各位兄die加油!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值