Redis 常用数据类型之 set(集合)

Redis 常用数据类型之 set(集合)

set 集合特性

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

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

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

set 常用命令

操作

命令

例子

说明

添加

sadd

sadd key v1 v2 v3

 

删除指定元素

srem

srem key v1 v2

可以同时删除多个元素

随机删除元素 spop spop key count 随机删除指定的元素(count 值可以为 0,  0 表示删除其中一个)

查看所有元素

smembers

smemberes key

 

判断元素是否存在

sismember

sismember key v1

如果返回1,就表示存在;如果返回0,就表示不存在

2个key的差集

sdiff

sdiff key1 key2

这个与位置关系。这是将 key1 中的每一项元素都与 key2 进行比较,在 key2 中不存在的就会被返回出来。

2个key的交集

sinter

sinter key1 key2

返回出在 key1 与 key2 中都存在的部分元素

2个key的并集

sunion

sunion key1 key2

将 key1 与 key2 合并,返回去除重复的部分元素

返回集合中的数量

scard

scard key1

返回 key1 的数量,即:集合的size

返回随机成员

srandmember

srandmember key1

随机返回一个成员
移动指定的值到另一个集合中 smove smove key1 key2 v1 将 key1 中的成员 v1 移动到 key2 中,如果 key2 不存在,就会自动创建

将两个集合差集放入到一个新的集合中

sdiffstore

sdiffstore m1 m2 m3

把 m2 和 m3 的差集放进 m1

将两个集合交集放入到一个新的集合中

sinterstore

sinterstore m1 m2 m3

把 m2 和 m3 的交集放进 m1

将两个集合并集放入到一个新的集合中

sunionstore

sunionstore m1 m2 m3

把 m2 和 m3 的并集放进 m1

详细操作

基础操作(sadd、srem、smembers、sismember、scard)

127.0.0.1:6379> sadd myset member1                # 在 set 集合中添加元素
(integer) 1
127.0.0.1:6379> sadd myset member2 member3        # 继续在 set 集合中添加元素
(integer) 2
127.0.0.1:6379> smembers myset                    # 查看 set 集合中的元素
1) "member1"
2) "member3"
3) "member2"
127.0.0.1:6379> sismember myset member1           # 判断 set 集合中的元素是否存在
(integer) 1
127.0.0.1:6379> sismember myset member4
(integer) 0
127.0.0.1:6379> srem myset member1                # 删除 set 集合中的某一个元素
(integer) 1
127.0.0.1:6379> smembers myset
1) "member3"
2) "member2"
127.0.0.1:6379> scard myset                       # 查看 set 集合的数量
(integer) 2
127.0.0.1:6379>

抽取随机成员(srandmember)

突然发现,这个命令可以用来做抽奖功能,将人员名称导入到 set 集合中,然后每次抽取一个成员出来,抽取出来了之后就移除这个成员,下次继续抽取。

127.0.0.1:6379> sadd nameList Tim Tom Tonny Pony Jack Jim Nike       # 添加成员变量
(integer) 7
127.0.0.1:6379> scard nameList
(integer) 7
127.0.0.1:6379> smembers nameList
1) "Tim"
2) "Tom"
3) "Tonny"
4) "Jim"
5) "Nike"
6) "Pony"
7) "Jack"
127.0.0.1:6379> srandmember nameList                                 # 随机返回一个成员
"Tom"
127.0.0.1:6379> srandmember nameList
"Tim"
127.0.0.1:6379> srandmember nameList 3                               # 随机返回三个成员
1) "Jim"
2) "Jack"
3) "Nike"
127.0.0.1:6379> srandmember nameList 4                               # 随机返回四个成员
1) "Tonny"
2) "Jack"
3) "Pony"
4) "Nike"
127.0.0.1:6379> srandmember nameList 3                               # 验证随机返回三个成员
1) "Tom"
2) "Jack"
3) "Nike"
127.0.0.1:6379> srandmember nameList 3
1) "Tonny"
2) "Jim"
3) "Nike"
127.0.0.1:6379>

随机删除元素(spop)

127.0.0.1:6379> smembers nameList            # 检查成员
1) "Tim"
2) "Tom"
3) "Tonny"
4) "Jim"
5) "Nike"
6) "Pony"
7) "Jack"
127.0.0.1:6379> spop nameList                # 随机删除其中一个元素
"Jim"
127.0.0.1:6379> smembers nameList            # 查看删除之后的元素
1) "Tim"
2) "Tom"
3) "Tonny"
4) "Nike"
5) "Pony"
6) "Jack"
127.0.0.1:6379> spop nameList 3              # 随机删除 3 个元素
1) "Pony"
2) "Tom"
3) "Tim"
127.0.0.1:6379> smembers nameList
1) "Tonny"
2) "Nike"
3) "Jack"
127.0.0.1:6379>

将指定的值移动到另外一个 set 集合(smove)

127.0.0.1:6379> smembers nameList                    # 查看成员
1) "Tonny"
2) "Nike"
3) "Jack"
127.0.0.1:6379> smove nameList nameListBak Tonny     # 将 nameList 中的指定元素移到到 nameListBak  中 
(integer) 1
127.0.0.1:6379> smembers nameList                    # 查看 nameList 成员
1) "Nike"
2) "Jack"
127.0.0.1:6379> smembers nameListBak                 # 查看 nameListBak 成员
1) "Tonny"
127.0.0.1:6379>

差集、交集与并集操作(sdiff、sinter、sunion)

127.0.0.1:6379> sadd key1 a b c d e            # 添加 key1 
(integer) 5
127.0.0.1:6379> sadd key2 a c e                # 添加 key2
(integer) 3
127.0.0.1:6379> sdiff key1 key2                # key1 与 key2 的差集
1) "b"
2) "d"
127.0.0.1:6379> sinter key1 key2               # key1 与 key2 的交集
1) "e"
2) "c"
3) "a"
127.0.0.1:6379> sunion key1 key2               # key1 与 key2 的并集
1) "b"
2) "a"
3) "c"
4) "e"
5) "d"
127.0.0.1:6379>

猜你喜欢

转载自blog.csdn.net/qq_18948359/article/details/114891518