Set
类型
Redis
的Set
类型和Java
中的HashSet
类似,可以看作是一个Value
为null
的HashMap
。因为其也是一个Hash
表,所以说具备和HashSet
相似的特征:元素无序存储、元素不可重复、查找效率高、支持交、并、差集等集合运算
。

上图是Set
类型的常用命令,是基本的命令,只涉及到单个Set
的操作。

这张图是Set
之间的运算命令,也就是不同Set
进行集合运算的命令,集合之间的运算关系如图所示:

图中两个Set
的并集(SUNION
)是A、B、C、D
。需要注意的是Set
中的元素是不可以重复的,在单个Set
操作时,如果Sadd
的元素重复将插入失败;在Set
间进行运算时,会自动去重。
SortedSet
类型
Redis
的SortedSet
是一个可排序的Set
集合,和Java中的TreeSet
类似,但底层的数据结构差别很大 。SortedSet
中的每一个元素都带有一个Score
属性,可以基于Score
属性对元素进行排序 ,其底层的是实现是一个跳表(SkipList
)加一个Hash表
,SortedSet
具备这些特性:元素之间可排序、元素之间不重复、查询效率高 ,由于SortedSet
天生自带可排序的特性,所以说经常用于实现排行榜这样的功能。

上图是SrotedSet
的常用命令,在使用SortedSet
类型的时候需要注意:每一个元素都需要一个Score
属性,而Score
属性也正是SortedSet用于排序的依据 。并且SortedSet在排序时默认是升序
排列的 ,如果想要获取降序排列的结果,可以在命令开头的Z
后面添加REV(Reverse)
来代表降序排列
。在使用SortedSet
时需要注意到底是需要获取分数区间的元素个数 还是要获取分数区间的具体元素。