Redis 五大数据类型 - Set类型
对Set类型的操作命令1、sadd:添加元素,格式:sadd key member[member…]127.0.0.1:6379> sadd myset v1 v2 v3(integer) 3127.0.0.1:6379> sadd myset v1(integer) 02、smembers:获取集合中所有元素,格式:SMEMBERSkey127.0.0.1:6379> SMEM
集合( set)类型也是用来保存多个的字符串元素,但和列表类型不一样的是,集合中不允许有重复元素,并且集合中的元素是无序的,
不能通过索引下标获取元素。
一个集合最多可以存储2的32次方-1个元素。Redis除了支持集合内的增删改查,同时还支持多个集合取交集、并集、差集,合理地
使用好集合类型,能在实际开发中解决很多实际问题。
对Set类型的操作命令
1、sadd:添加元素,允许添加多个,返回结果为添加成功的元素个数,格式:sadd key member [member…]
127.0.0.1:6379> sadd myset v1 v2 v3
(integer) 3
127.0.0.1:6379> sadd myset v1
(integer) 0
2、smembers:获取集合中所有元素(不会弹出元素),格式:SMEMBERS key
127.0.0.1:6379> SMEMBERS myset
1) "v2"
2) "v1"
3) "v3"
3、sismember:判断元素是否在集合中,格式:SISMEMBER key member (member具体的值)
127.0.0.1:6379> SISMEMBER myset v1
(integer) 1
127.0.0.1:6379> SISMEMBER myset v12
(integer) 0
4、srem:删除元素,格式:srem key member [member…]
127.0.0.1:6379> SREM myset v1
(integer) 1
127.0.0.1:6379> SREM myset v2 v3
(integer) 2
5、scard:获取集合中元素的个数,格式是:scard key
127.0.0.1:6379> sadd myset v1 v2 v3
(integer) 3
127.0.0.1:6379> SCARD myset
(integer) 3
6、srandmember(随机事件):随机获取集合中的元素,格式:srandmember key count (count数量为正数时,会随机获取这么多个不重复的元素;如果数量大于集合元素个数,返回全部;如果数量为负,会随机获取这么多个元素,可能有重复。如果为0不返回结果)
127.0.0.1:6379> SADD k1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> SRANDMEMBER k1 10
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> SRANDMEMBER k1 3
1) "3"
2) "5"
3) "1"
127.0.0.1:6379> SRANDMEMBER k1 -8
1) "4"
2) "5"
3) "4"
4) "3"
5) "5"
6) "2"
7) "5"
8) "4"
127.0.0.1:6379> SRANDMEMBER k1 0
(empty list or set)
7、spop(随机事件):随机弹出元素(从列表移除),srandmember不会,格式:spop key
127.0.0.1:6379> SADD myset v1 v2 v3 v4
(integer) 4
127.0.0.1:6379> SPOP myset 1
1) "v3"
127.0.0.1:6379> SPOP myset 1
1) "v4"
127.0.0.1:6379> SMEMBERS myset
1) "v2"
2) "v1"
8、smove:移动元素。格式是:smove source destination member(destination 为目标key 一次只能移动一个,member是具体的数据)
127.0.0.1:6379> SADD myset v1 v2 v3 v4
(integer) 4
127.0.0.1:6379> SMOVE myset myset2 v3
(integer) 1
127.0.0.1:6379> SMOVE myset myset2 v2
(integer) 1
127.0.0.1:6379> SMOVE myset myset2 v10 不存在返回0
(integer) 0
127.0.0.1:6379> SMEMBERS myset
1) "v1"
2) "v4"
127.0.0.1:6379> SMEMBERS myset2
1) "v2"
2) "v3"
集合间操作命令
1、sinter:交集,返回多个key里面都有的项。格式:sinter key [key …]
127.0.0.1:6379> SADD myset v1 v2 v3 v4
(integer) 4
127.0.0.1:6379> SADD myset2 v3 v4 v5 v6
(integer) 4
127.0.0.1:6379> SINTER myset myset2
1) "v4"
2) "v3"
2、 sinterstore:交集并保留结果。格式:sinterstore destination key [key …] 获取指定一个或多个key的交集并存放到destination 中( destination 为目标key)。
127.0.0.1:6379> SADD myset v1 v2 v3 v4
(integer) 4
127.0.0.1:6379> SADD myset2 v3 v4 v5 v6
(integer) 4
127.0.0.1:6379> SINTERSTORE my myset
(integer) 4
127.0.0.1:6379> SMEMBERS my
1) "v1"
2) "v2"
3) "v4"
4) "v3"
127.0.0.1:6379> SINTERSTORE my2 myset myset2
(integer) 2
127.0.0.1:6379> SMEMBERS my2
1) "v4"
2) "v3"
11、sunion:并集。格式:sunion key [key …] 返回一个或多个key共同存在的,并且不重复
127.0.0.1:6379> SADD myset v1 v2 v3 v4
(integer) 4
127.0.0.1:6379> SADD myset2 v3 v4 v5 v6
(integer) 4
127.0.0.1:6379> SUNION myset myset2
1) "v2"
2) "v1"
3) "v6"
4) "v4"
5) "v3"
6) "v5"
12、sunionstore:并集并保留结果。格式:sunionstore destination key [key …] 获取指定一个或多个key的交集并存放到destination 中( destination 为目标key)。。
127.0.0.1:6379> SADD myset v1 v2 v3 v4
(integer) 4
127.0.0.1:6379> SADD myset2 v3 v4 v5 v6
(integer) 4
127.0.0.1:6379> SUNIONSTORE my3 myset myset2
(integer) 6
127.0.0.1:6379> smembers my3
1) "v2"
2) "v1"
3) "v6"
4) "v4"
5) "v3"
6) "v5"
13、sdiff:差集,返回在第一个key里面而不在后面任何一个key里面的项。格式是:sdiff key [key…]
127.0.0.1:6379> SADD myset v1 v2 v3 v4
(integer) 4
127.0.0.1:6379> SADD myset2 v3 v4 v5 v6
(integer) 4
127.0.0.1:6379> SDIFF myset myset2
1) "v1"
2) "v2"
127.0.0.1:6379> SDIFF myset2 myset
1) "v6"
2) "v5"
14、sdiffstore:差集并保留结果,返回在第一个key里面而不在后面任何一个key里面的项,
格式:sdiffstore destination key [key …] 获取指定一个或多个key的差集集并存放到destination 中( destination 为目标key)。
127.0.0.1:6379> SADD myset v1 v2 v3 v4
(integer) 4
127.0.0.1:6379> SADD myset2 v3 v4 v5 v6
(integer) 4
127.0.0.1:6379> SDIFFSTORE my4 myset myset2
(integer) 2
127.0.0.1:6379> SMEMBERS my4
1) "v1"
2) "v2"
127.0.0.1:6379> SDIFFSTORE my5 myset2 myset
(integer) 2
127.0.0.1:6379> SMEMBERS my5
1) "v6"
2) "v5"
15、SSCAN key cursor [MATCH pattern] [COUNT count] :迭代集合中的元素
127.0.0.1:6379> SADD myset A
(integer) 1
127.0.0.1:6379> SADD myset B
(integer) 1
127.0.0.1:6379> SADD myset C
(integer) 1
127.0.0.1:6379> SADD myset BB
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "BB"
2) "B"
3) "A"
4) "C"
127.0.0.1:6379> SSCAN myset 0 match B*
1) "0"
2) 1) "BB"
2) "B"
使用场景
集合类型比较典型的使用场景是标签(tag)。例如一个用户可能对娱乐、体育比较感兴趣,另一个用户可能对历史、新闻比较感兴趣,这些兴趣点就是标签。有了这些数据就可以得到喜欢同一个标签的人,以及用户的共同喜好的标签,这些数据对于用户体验以及增强用户黏度比较重要。
例如一个电子商务的网站会对不同标签的用户做不同类型的推荐,比如对数码产品比较感兴趣的人,在各个页面或者通过邮件的形式给他们推荐最新的数码产品,通常会为网站带来更多的利益。
除此之外,集合还可以通过生成随机数进行比如抽奖活动,以及社交图谱等等。
更多推荐
所有评论(0)