2

概念

可以想象一下高中学过的集合,一样。

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}

image_1au7odtl5e7e1e0q13a3drg167sm.png-48.6kB

交集运算

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类型

image_1au7ooko910mrrpr4aqbq6u6q13.png-54.2kB

使用SET类型,就很容易的对某个标签进行:
增加、删除、更改。
优雅~

更多精彩,请关注公众号“聊聊代码”,让我们一起聊聊“左手代码右手诗”的事儿。
图片描述


zilu
1.3k 声望175 粉丝