概念
可以想象一下高中学过的集合,一样。
SET与LIST的比较
SET:元素无序,元素不可重复。
LIST:元素有序,元素可重复。
SET好用的特性
SET可以进行差集、交集、并集的运算。
命令
添加、删除元素
SADD letters a b //向集合letters中添加元素a、b
SREM letters a //移除集合letters中的元素a
获取集合中的所有元素
SMEMBERS letters
判断一个元素是否属于集合
//判断一个元素是否在集合中,时间复杂度是O(1),所以速度非常快。
SISMEMBER letters a //属于返回1 不属于返回0
获取集合中元素的个数
SCARD letters
随机获取集合中的一个元素
SRANDMEMBER letters
随机POP集合中的一个元素
SPOP letters
集合间运算
差集运算
概念
A与B的差集:表示A中有但是B中没有的元素的集合
B与A的差集:表示B中有但是A中没有的元素的集合
SDIFF A B //表示A与B的差集
SDIFF支持传入2个以上参数,如下图3个集合进行DIFF运算。
首先 setA 与 setB 进行DIFF ,得到集合 {1 2}
然后,集合{1 2}再和setC进行DIFF,得到集合{2}
交集运算
SINTER setA setB (得出集合元素:既属于setA又属于setB)
并集运算
SUNION setA setB (得出集合元素,属于setA或者属于setB)
问题思考·如何存储文章标签最优雅
描述
如果要存储文章标签的话,选择什么类型的数据结构最合适?
PS:一个文章标签有多个。比如一篇文章标签是:“PHP、技术随笔、知识分享”。比如我现在想替换“PHP”标签为“PHP性能优化”。
分析
String类型
文章ID:文章标签。
这个例子中可以存储(假设文章ID为5):
ID:5 : PHP、技术随笔、知识分享。
我如果想替换PHP标签为PHP性能优化。
只能是重新SET:
SET ID:5 PHP、技术随笔、知识分享
替换动作:
SET ID:5 PHP性能优化、技术随笔、知识分享
这个很不优雅,PASS
HASH类型
HASH类型存储了对象中属性与属性值的映射关系。
假设HSET一个文章ID,属性包括 文章title、content、tags
HMSET ID:5 title 文章标题 content 文章内容 tags PHP、技术随笔、知识分享
我要改变文章的tags:
HSET tags PHP性能优化、技术随笔、知识分享
同样,也是重写他的tags,不是替换掉某一个tag。(和String没啥区别)
不优雅,PASS。
LIST类型
LIST类型可以存储文章标签。
注意:LIST有2个特性:有序、元素可重复。
但是,存储文章标签,内容无序,存储内容是不可重复的。
可以,但是不优雅,PASS。
SET类型
使用SET类型,就很容易的对某个标签进行:
增加、删除、更改。
优雅~
更多精彩,请关注公众号“聊聊代码”,让我们一起聊聊“左手代码右手诗”的事儿。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。