Redis sets数据类型及操作

sets类型及操作

set是集合,和数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作,操作中key理解为集合的名字。

set是通过hash table实现的,所以添加、删除和查找的复杂度都是O(1)。hash table会随这添加或者删除自动的调整大小。需要注意的是调整hash table大小时候需要同步(获取写锁)会阻塞其他读写操作,可能不久后就会改用跳表(skip list)来实现,跳表已经再sorted set中使用了。
关于set集合类型除了基本的添加删除操作,其他有用的操作还包含集合的取并集(union),交集(intersection),差集(difference)。通过这些操作可以很容易的实现sns中的好友推荐和blog的tag功能。

1.sadd 向名称为key的set中添加元素

sadd myset "hello"
sadd myset "world"

2.srem删除名称为key的set中的元素member

sadd myset2 "hello"
sadd myset2 "world"
sadd myset2 "you"
srem myset2 "hello"
srem myset2 "world"

3.spop 随机返回并删除名称为key的set中一个元素

spop myset2

4.sdiff 返回所有给定key与第一个key的差集

sdiff myset myset1

5.sdiffstore 返回所有给定key与第一个key的差集,并将结果存为另一个key。

sdiffstore myset myset1 m1

6.sinter 返回所有给定key的交集

sinter myset myset1 m

7.sinterstore 返回 所有给定key的交集,并将结果存为另一个key

sinterstore storespace myset myset1 

8.sunion 返回所有给定key的并集

sunion myset myset1

9.sunionstore 返回所有给定key的并集,并将结果村委另一个key

sunionstore unionspace myset myset1

10.smove 从第一个key对应的set中移除member并添加到第二个对应set中

smove myset m2

11.scard 返回名称为key的set的元素个数

scard myset

12.sismember 测试member是否是名称为key的set的元素

sismember myset world

13.srandmember 随机返回名称为key的set的一个元素,但是不删除元素

srandmember myset

初步总结:
交集、差集、并集的使用 我想会是在很多地方都能简化计算操作吧

本文链接:

https://heyzen.club/index.php/Coder/92.html
1 + 8 =
快来做第一个评论的人吧~