欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Nosql之Redis: set数据类型及操作命令

程序员文章站 2022-03-10 15:53:01
...

set 类型 一:概述 set是集合,它是string类型的无序集合.set是通过hash table实现的, 添加, 删除和查找的复杂度都是O(1).对集合我们可以取并集,交集,差集. 通过这些操作我们可以实现sns中的好友推荐和博客的tag功能. 二:相关操作命令 1:sadd 描述: 增加成员到

set 类型

一:概述
set是集合,它是string类型的无序集合.set是通过hash table实现的,
添加, 删除和查找的复杂度都是O(1).对集合我们可以取并集,交集,差集.
通过这些操作我们可以实现sns中的好友推荐和博客的tag功能.

二:相关操作命令
1:sadd
描述: 增加成员到set序列
返回值:本次操作实际插入的成员数量。
命令格式: sadd key member [member...]
时间复杂度: O(N) N:表操作成员数量
操作如下:

redis 127.0.0.1:6379> sadd my_set test1
(integer) 1
redis 127.0.0.1:6379> sadd my_set test1
(integer) 0
redis 127.0.0.1:6379> sadd my_set test2
(integer) 1
redis 127.0.0.1:6379> smembers my_set
1) “test1″
2) “test2″
##连着插入多个成员
redis 127.0.0.1:6379> sadd my_set test3 test4
(integer) 2
redis 127.0.0.1:6379> smembers my_set
1) “test3″
2) “test4″
3) “test1″
4) “test2″

2: smembers
描述:获取set中所有成员
时间复杂度:O(1)
操作如上面.

3:scard
描述:获取Set中成员的数量。
时间复杂度:O(1)
4: sismember
描述:判断参数中指定成员是否已经存在于与Key相关联的Set集合中。
时间复杂度:O(1)
返回值:1表存在,0表不存在.
操作命令如下:
redis 127.0.0.1:6379> scard my_set
(integer) 4
redis 127.0.0.1:6379> sismember my_set1 aa
(integer) 0
redis 127.0.0.1:6379> sismember my_set test1
(integer) 1

5: spop
描述:随机的移除并返回Set中的某一成员。
时间复杂度:O(1)
返回值:返回移除的成员,如果该Key并不存在,则返回nil。
操作命令如下:
redis 127.0.0.1:6379> spop my_set
“test3″
redis 127.0.0.1:6379> smembers my_set
1) “test4″
2) “test1″
3) “test2″

6: srem
描述:删除参数中指定的成员(可多个)
时间复杂度:O(N) N表示被删除成员的数量
命令格式: srem key member [member ...]
返回值:返回实际删除的成员数.如果没有,返回0;
操作命令如下:
redis 127.0.0.1:6379> smembers my_set
1) “test4″
2) “test1″
3) “test2″
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> srem my_set test4
(integer) 1
redis 127.0.0.1:6379> smembers my_set
1) “test1″
2) “test2″
redis 127.0.0.1:6379> srem my_set test1 test2
(integer) 2
redis 127.0.0.1:6379> smembers my_set
(empty list or set)
7: srandmember
描述: 和SPOP一样,随机的返回Set中的一个成员,不同的是该命令并不会删除返回的成员。
时间复杂度:O(1)
返回值:返回随机位置的成员,如果Key不存在则返回nil。
操作命令如下:
redis 127.0.0.1:6379> srandmember my_set
(nil)
redis 127.0.0.1:6379> sadd my_set test1 test2
(integer) 2
redis 127.0.0.1:6379> srandmember my_set
“test1″

8: smove
描述:把一个set集合中的某个元素移动到另外一个set集合
时间复杂度:O(1)
命令格式:smove source destination member
返回值:1表示正常移动,0表示source中并不包含参数成员。
操作命令如下:
redis 127.0.0.1:6379> smembers my_set
1) “test1″
2) “test2″
redis 127.0.0.1:6379> smembers my_set_2
(empty list or set)
redis 127.0.0.1:6379> smove my_set my_set_2 test1
(integer) 1
redis 127.0.0.1:6379> smembers my_set_2
1) “test1″
redis 127.0.0.1:6379> smembers my_set
1) “test2″

##成员不存时
redis 127.0.0.1:6379> smove my_set_2 my_set_3 aa
(integer) 0
9: sdiff
描述:返回参数中第一个Key所关联的Set和其后所有Keys所关联的Sets中成员的差异.
返回值:差异结果成员的集合。
时间复杂度:O(N) N表示所有Sets中成员的总数量
命令格式: sdiff key [key ...]
操作命令如下:
redis 127.0.0.1:6379> smembers my_set_2
1) “test1″
redis 127.0.0.1:6379> smembers my_set
1) “test2″
redis 127.0.0.1:6379> sadd my_set test3
(integer) 1
redis 127.0.0.1:6379> smembers my_set
1) “test3″
2) “test2″
redis 127.0.0.1:6379> sdiff my_set my_set_2
1) “test3″
2) “test2″
redis 127.0.0.1:6379> sdiff my_set_2 my_set
1) “test1″

10: sdiffstore
描述:该命令和SDIFF命令在功能上完全相同,两者之间唯一的差别是SDIFF返回差异的结果成员,而该命令将差异成员存储在destination关联的Set中。如果destination键已经存在,该操作将覆盖它的成员。
返回值:返回差异成员的数量。
时间复杂度:O(N) N表示所有Sets中成员的总数量
命令格式: sdiffstore destination key [key ...]
操作命令如下:
#将2个集合的差异成员存在在my_set_diff关联的Set中,并返回插入的成员数量。
redis 127.0.0.1:6379> sdiff my_set my_set2
1) “test3″
2) “test2″
redis 127.0.0.1:6379> sdiffstore my_set_diff my_set my_set_2
(integer) 2
redis 127.0.0.1:6379> smembers my_set_diff
1) “test3″
2) “test2″

11: sinter
描述:该命令将返回参数中所有Keys关联的Sets中成员的交集。因此如果参数中任何一个Key关联

的Set为空,或某一Key不存在,那么该命令的结果将为空集。
时间复杂度: O(N*M) N表示最小Set中元素的数量,M则表示参数中Sets的数量。
命令格式: sinter key [key ...]
返回值: 交集结果成员的集合
操作命令如下:
redis 127.0.0.1:6379> sinter my_set my_set_diff
1) “test3″
2) “test2″

12: sinterstore
描述:和sinter功能相同,返回交集的结果成员
时间复杂度: O(N*M) N表示最小Set中元素的数量,M则表示参数中Sets的数量。
命令格式: sinterstore destination key [key ...]
返回值:返回交集成员
13:sunion

描述:返回参数中所有Keys关联的Sets中成员的并集。
命令格式: sunion key [key...]
时间复杂度:O(N) N表示所有Sets中成员的总数量
操作命令如下:
redis 127.0.0.1:6379> sunion my_set my_set_2
1) “test3″
2) “test1″
3) “test2″

?
14:sunionstore
描述:与sunion功能相同,返回并集成员的数量。

操作命令如下:
redis 127.0.0.1:6379> sunionstore my_set my_set_2
(integer) 1
redis 127.0.0.1:6379> sunion my_set my_set_2
1) “test1″