一、引言
Redis 的 集合类型 (Set) 是通过 哈希表(hash table) 实现的,因此:

快速:插入、删除、查找操作的时间复杂度都是 O(1) 。
唯一:所有元素都是唯一的,不允许重复。
无序:元素是无序的(不像 List 那样有顺序)。
集合类型和列表类型的区别如下:

列表可以存储重复元素,集合只能存储非重复元素;
列表是按照元素的先后顺序存储元素的,而集合则是无序方式存储元素的。
Redis 数据结构 — Set 类型插图

一个集合最多可以存储 232−12^{32} – 12321个元素。Redis除了支持集合内的增删改查,同时还支持多个集合取交集、并集、差集,合理地使用好集合类型,能在实际开发中解决很多实际问题。

注意:set 中的元素叫作 member

二、Set 命令

1. 普通命令

Redis 数据结构 — Set 类型插图1

1.1 SADD & SPOP & SMEMBERS
① SADD:将⼀个或者多个元素添加到set中。注意,重复的元素无法添加到set中

② SPOP:从集合中删除并返回一个或多个元素。

由于set内的元素是无序的,所以取出哪个元素实际是未定义行为,即可以看作随机的
官方文档中声明,spop得到的值是随机的,就算是两个相同的集合,同样的操作得到的值也不一样。因为Redis源码中给spop增加了一个生成随机成员的过程,是真正做了随机功能。

③ SMEMBERS:获取集合中的所有元素

④ SRANDMEMBER:获取set中的随即元素

样例如下:

127.0.0.1:6379> sadd set 1 2 3
(integer) 3
127.0.0.1:6379> sadd set 1 2 3 4 5 #
(integer) 2
127.0.0.1:6379> smembers set
1) “1”
2) “2”
3) “3”
4) “4”
5) “5”

127.0.0.1:6379> spop set
“5”
127.0.0.1:6379> spop set # 随机取出
“2”
127.0.0.1:6379> spop set 2
1) “4”
2) “3”

127.0.0.1:6379> smembers set
1) “1”
127.0.0.1:6379> srandmember set
“4”

1.2 SISMEMBER & SCRAD

① SISMEMBER:判断⼀个元素在不在set中

② SCRAD:获取 Set 中的元素个数

样例如下:

127.0.0.1:6379> scard set
(integer) 4
127.0.0.1:6379> sismember set 3
(integer) 1
127.0.0.1:6379> sismember set 6
(integer) 0

1.3 SMOVE & SREM

① SMOVE:将一个元素从源集合移动到目标集合

语法如下:

SMOVE source destination member

样例如下:

127.0.0.1:6379> sadd set1 1 2 3
(integer) 3
127.0.0.1:6379> sadd set2 3 4 5
(integer) 3

127.0.0.1:6379> smove set2 set1 4
(integer) 1
127.0.0.1:6379> smembers set1
1) “1”
2) “2”
3) “3”
4) “4”
127.0.0.1:6379> smembers set2
1) “3”
2) “5”

此处将set2中的4元素移动到了set1中。

在移动过程中,可能出现以下两种情况:

member 已经在 destination 中存在,此时会将 member从 source中删除,并且spop返回1视为移动成功
member 在 source中不存在,此时 spop 返回0,表示移动失败

欢迎使用66资源网
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
7. 本站有不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!

66源码网 » Redis 数据结构 — Set 类型

提供最优质的资源集合

立即查看 了解详情