Redis学习笔记(六)——Redis常用命令入门——集合类型
2016-03-28 02:08
656 查看
五、集合类型
之前我们已经介绍过了最基本的字符串类型、散列类型、列表类型,下面我们一起学习一下集合类型。集合类型也是体现redis一个比较高价值的一个类型了。因为Redis的集合类型,所以我们可以很容易的在Redis中执行差集运算、交集运算、并集运算。
首先我们先介绍一下集合类型和列表类型的区别,其实学过面向对象的语言的同学应该都能猜到这些类型有什么不同。
①集合类型和列表类型还是都能存储2^32-1个字符串
②集合类型是无序的,列表类型是有序的
③集合类型是唯一的,列表类型的值是不唯一的
下面我们一起来看一下语法。
1、增加删除元素命令
Shell
sadd key member [member ...]
srem key member [member ...]
1 2 | sadd key member [member ...] srem key member [member ...] |
srem命令也是一样,删除元素,如果元素存在才会删除成功,返回值是成功删除的元素的个数。
2、获得集合中的所有元素
Shell
smembers key
1 | smembers key |
Shell
sismember key member
1 | sismember key member |
4、集合间运算
Shell
sdiff key [key ...]
sinter key [key ...]
sunion key [key ...]
1 2 3 | sdiff key [key ...] sinter key [key ...] sunion key [key ...] |
我们先准备点测试数据。
Shell
redis>sadd seta 1 2 3
(integer) 3
redis>sadd setb 2 3 4
(integer) 3
redis>sadd setc 1 2 5
(integer) 3
1 2 3 4 5 6 | redis>sadd seta 1 2 3 (integer) 3 redis>sadd setb 2 3 4 (integer) 3 redis>sadd setc 1 2 5 (integer) 3 |
集合A与集合B的差值运算表示为A-B,代表所有属于A且不属于B的元素构成的集合。这个命令同时支持传入多个键,意思是A与B先做差集运算,然后结果再与C做差集运算。
Shell
redis>sdiff seta setb
1) "1"
redis>sdiff setb seta
1) "4"
redis>sdiff seta setb setc
1) "1"
1 2 3 4 5 6 | redis>sdiff seta setb 1) "1" redis>sdiff setb seta 1) "4" redis>sdiff seta setb setc 1) "1" |
Shell
redis>sinter seta setb
1) "2"
2) "3"
redis>sinter seta setb setc
1) "2"
1 2 3 4 5 | redis>sinter seta setb 1) "2" 2) "3" redis>sinter seta setb setc 1) "2" |
Shell
redis>sunion seta setb
1) "1"
2) "2"
3) "3"
4) "4"
redis>sunion seta setb setc
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
1 2 3 4 5 6 7 8 9 10 11 | redis>sunion seta setb 1) "1" 2) "2" 3) "3" 4) "4" redis>sunion seta setb setc 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" |
Shell
scard key
1 | scard key |
6、进行集合运算并将结果存储
Shell
sdiffstore destination key [key ...]
sinterstore destination key [key ...]
sunionstore destination key [key ...]
1 2 3 | sdiffstore destination key [key ...] sinterstore destination key [key ...] sunionstore destination key [key ...] |
7、随机获得集合中的元素
Shell
srandmember key [count]
1 | srandmember key [count] |
(1)当count为正数时,获取count个不重复的元素,如果count大于所有值的个数,则返回全部元素。
(2)负值时,获得|count|个元素,但有可能相同。
其实这个随机并不是非常随机,因为实际上redis的集合用的是散列的存储结构,有兴趣的读者可以自己深入研究一下。
8、从结合中弹出一个元素
Shell
spop key
1 | spop key |
下面我们来举例一个集合的具体应用。
在我们文章存储的时候有个标签tag,这个我们在关系数据库的时候都需要使用中间表关联。但是在Redis中,我们可以很方便的处理。
对每篇文章,我们使用一个post:文章ID:tags的键,类型为集合,存储一篇文章所属的tags,这样本身关系型数据库我们需要关联文章表、标签表、中间关系表三个表的复杂操作,在Redis中就很好处理了。
有时候我们还需要获取指定标签的所有文章,我们还需要增加一类的键,即tag:标签名称:posts的集合类型键,存储每个标签的文章ID集合,这样我们每次想要获取所有属于某个标签的文章列表的时候也不用像关系数据库那样关联那么多表,而是直接通过键就可以直接获得了。
而在我们想要获取比如同时属于java和redis标签的文章时,我们只需要对tag:java:posts和tag:redis:posts做交集运算就OK了,是不是很方便呢?
到此我们集合就介绍完了。
相关文章推荐
- Redis学习笔记(五)——Redis常用命令入门——列表类型
- Redis学习笔记(四)——Redis常用命令入门——散列类型
- Redis学习笔记(三)——Redis常用命令入门——字符串类型命令
- Redis学习笔记(二)——Redis的准备
- Redis学习笔记(一)——介绍
- 几点建议,让Redis在你的系统中发挥更大作用
- 第十章 Redis学习手册之持久化
- 第十一章 Redis学习手册之虚拟内存
- 分布式 Dubbo+Zookeeper+springmvc+mybatis+shiro+restful+activemq+redis
- redis——string类型的设计与实现
- [收藏]redis速查
- redis——redis的创建与部署
- redis cluster 配置
- Too many cluster redirections redis
- 基于Redis的三种分布式爬虫策略
- Windows系统下安装Redis
- redis持久化策略RDB和AOF
- redis面试题总结
- Redis服务安装及PHP扩展
- Redis-util 转换函数