ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Redis(六)—— Set 集合类型详解

2021-08-07 13:31:27  阅读:195  来源: 互联网

标签:127.0 sadd 0.1 myset Redis 6379 Set integer 详解


Set(集合)

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

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

Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)。

使用实例

设置集合的值:sadd

#================================================================
127.0.0.1:6379> sadd myset world
(integer) 1
127.0.0.1:6379> sadd myset hello
(integer) 1
127.0.0.1:6379> sadd myset hello #重复添加则失败
(integer) 0


查看集合的所有值:smembers,为1存在,为0不存在

#================================================================
127.0.0.1:6379> smembers myset
1) "world"
2) "hello"

判断某个值是否在集合中:sismember,为1存在,为0不存在

#================================================================
127.0.0.1:6379> sismember myset hello
(integer) 1  #存在
127.0.0.1:6379> sismember myset hi
(integer) 0  #不存在

查看集合中值的个数:scard

#================================================================
127.0.0.1:6379> scard myset
(integer) 2

移除集合中的指定值:srem

#================================================================
127.0.0.1:6379> smembers myset
1) "hi"
2) "world"
3) "hello"
127.0.0.1:6379> srem myset hi
(integer) 1
127.0.0.1:6379> smembers myset
1) "world"
2) "hello"

随机移除集合中的值:spop

#================================================================
127.0.0.1:6379> smembers myset  #查看集合中所有值
1) "wan"
2) "world"
3) "hello"
4) "li"
127.0.0.1:6379> spop myset 1  #随机移除myset集合中的一个值
1) "wan"
127.0.0.1:6379> smembers myset
1) "world"
2) "hello"
3) "li"
127.0.0.1:6379> spop myset 2  #随机移除myset集合中的两个值
1) "world"
2) "li"
127.0.0.1:6379> smembers myset  #myset集合中值的剩余情况
1) "hello"

从集合中随机抽取元素,但不移除:srandmember

#================================================================
127.0.0.1:6379> sadd myset hello1
(integer) 1
127.0.0.1:6379> sadd myset hello2
(integer) 1
127.0.0.1:6379> sadd myset hello3
(integer) 1
127.0.0.1:6379> sadd myset hello4
(integer) 1
127.0.0.1:6379> sadd myset hello5
(integer) 1
127.0.0.1:6379> sadd myset hello6
(integer) 1
127.0.0.1:6379> sadd myset hello7
(integer) 1
127.0.0.1:6379> sadd myset hello8
(integer) 1
127.0.0.1:6379> sadd myset hello9
(integer) 1
127.0.0.1:6379> smembers myset
1) "hello7"
2) "hello5"
3) "hello3"
4) "hello4"
5) "hello6"
6) "hello1"
7) "hello8"
8) "hello2"
9) "hello9"
127.0.0.1:6379> srandmember myset  #从myset集合中随机抽取一个元素
"hello6"
127.0.0.1:6379> srandmember myset
"hello3"
127.0.0.1:6379> srandmember myset
"hello9"
127.0.0.1:6379> srandmember myset
"hello3"
127.0.0.1:6379> srandmember myset 2  #从myset集合中随机抽取两个元素
1) "hello7"
2) "hello8"
127.0.0.1:6379> srandmember myset 2
1) "hello5"
2) "hello2"
127.0.0.1:6379> srandmember myset 2
1) "hello6"
2) "hello9"
127.0.0.1:6379> srandmember myset 2
1) "hello3"
2) "hello8"

移动一个集合中的指定元素到另一个集合中:smove

#================================================================
127.0.0.1:6379> sadd myset1 hello1
(integer) 1
127.0.0.1:6379> sadd myset2 hello2
(integer) 1
127.0.0.1:6379> smove myset1 myset2 hello1 #移动myset1集合中的hello1元素到myset2集合中
(integer) 1
127.0.0.1:6379> smembers myset2
1) "hello1"
2) "hello2"
127.0.0.1:6379> smembers myset1
(empty array)

两个集合的差集(sdiff)和并集(sunion)和交集(sinter)

#================================================================
127.0.0.1:6379> sadd set1 a
(integer) 1
127.0.0.1:6379> sadd set1 b
(integer) 1
127.0.0.1:6379> sadd set1 c
(integer) 1
127.0.0.1:6379> sadd set2 c
(integer) 1
127.0.0.1:6379> sadd set2 d
(integer) 1
127.0.0.1:6379> sadd set2 e
(integer) 1
#==============================差集==================================
#集合set1中独有的元素
127.0.0.1:6379> sdiff set1 set2
1) "b"
2) "a"
#集合set2中独有的元素
127.0.0.1:6379> sdiff set2 set1
1) "e"
2) "d"
#==============================两个集合的并集==================================
127.0.0.1:6379> sunion set1 set2
1) "a"
2) "c"
3) "b"
4) "e"
5) "d"
127.0.0.1:6379> sunion set2 set1
1) "d"
2) "c"
3) "e"
4) "b"
5) "a"
#==============================两个集合的交集==================================
127.0.0.1:6379> sinter set1 set2
1) "c"

更多命令请参考:https://redis.io/commands

标签:127.0,sadd,0.1,myset,Redis,6379,Set,integer,详解
来源: https://blog.csdn.net/wpc2018/article/details/119485180

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有