设为首页 收藏本站
查看: 684|回复: 0

[经验分享] 5:redis的set类型

[复制链接]

尚未签到

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

redis 127.0.0.1:6378> sadd myset ljq
(integer) 1
redis 127.0.0.1:6378> sadd myset ljq2
(integer) 1
redis 127.0.0.1:6378> sadd myset ljq3 //添加
(integer) 1
redis 127.0.0.1:6378> smembers myset
1) "ljq2"
2) "ljq3"
3) "ljq"
redis 127.0.0.1:6378> srem myset ljq //删除某个
(integer) 1
redis 127.0.0.1:6378> smembers myset // 显示set
1) "ljq2"
2) "ljq3"
redis 127.0.0.1:6378> spop myset // 随机删除一个
"ljq3"
redis 127.0.0.1:6378> smembers myset
1) "ljq2"
redis 127.0.0.1:6378> sadd myset ljq3
(integer) 1
redis 127.0.0.1:6378> sadd myset ljq4
(integer) 1
redis 127.0.0.1:6378> smembers myset
1) "ljq2"
2) "ljq4"
3) "ljq3"
redis 127.0.0.1:6378> sadd myset2 ljq3
(integer) 1
redis 127.0.0.1:6378> sadd myset hello
(integer) 1
redis 127.0.0.1:6378> sadd myset2 hiworkd
(integer) 1
redis 127.0.0.1:6378> smembers myset2
1) "ljq3"
2) "hiworkd"
//返回所有给定 key 与第一个 key 的差集
redis 127.0.0.1:6378> sdiff myset myset2 // 显示myset中和myset2不同的
1) "ljq2"
2) "hello"
3) "ljq4"
redis 127.0.0.1:6378> sdiff myset2 myset // 显示myset2中和myset不同的
1) "hiworkd"

 2:sdiffstore [size=1em]返回所有给定 key 与第一个 key 的差集保存到另一个set中

redis 127.0.0.1:6378> smembers myset2
1) "hello"
2) "ljq3"
3) "ljq4"
redis 127.0.0.1:6378> sdiffstore myset3 myset2 myset
(integer) 1
redis 127.0.0.1:6378> smembers myset3
1) "hello"
 3:交集sinter

redis 127.0.0.1:6378> sinter myset2 myset // 交集
1) "ljq4"
2) "ljq3"
redis 127.0.0.1:6378> sinterstore myset4 myset2 myset //交集保存到myset4中
(integer) 2
redis 127.0.0.1:6378> smembers myset4
1) "ljq3"
2) "ljq4"

 4:并集sunion

redis 127.0.0.1:6378> sunion myset6 myset myset5 // 并集
1) "one"
2) "ljq3"
3) "ljq4"
4) "two"
redis 127.0.0.1:6378> smembers myset6
(empty list or set)
redis 127.0.0.1:6378> sunionstore myset6 myset myset5 // 并集保存到myset6
(integer) 4
redis 127.0.0.1:6378> smembers myset6
1) "one"
2) "ljq3"
3) "ljq4"

   5:[size=1em]smove从第一个 key 对应的 set 中移除 member 并添加到第二个对应 set 中

redis 127.0.0.1:6378> smembers myset6
1) "one"
2) "ljq3"
3) "ljq4"
4) "two"
redis 127.0.0.1:6378> smove myset6 myset7 one // 删除myset6一个放到myset7
(integer) 1
redis 127.0.0.1:6378> smembers myset7
1) "one"
redis 127.0.0.1:6378> smembers myset6
1) "ljq3"
2) "ljq4"
3) "two"

 6:[size=1em]scard ,[size=1em] sismember

redis 127.0.0.1:6378> smembers myset6
1) "ljq3"
2) "ljq4"
3) "two"
redis 127.0.0.1:6378> scard myset6 //显示个数
(integer) 3
redis 127.0.0.1:6378> sismember myset6 ljq3 //判断是否存在
(integer) 1
redis 127.0.0.1:6378> sismember myset6 ljq77
(integer) 0

 
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-315812-1-1.html 上篇帖子: redis学习笔记之排序 下篇帖子: redis之安装配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表