Sorted Set 类型
文章目录
前面文章讲解了 Set 类型,Set 类型有一个特点,就是集合中的元素是唯一的。而 Zset 类型(Sorted Set)不同,它是一个有序集合,集合中的每一个元素是由“两个单元组成的”,分别是: 元素本身+对应的分数,依靠这个分数,就维护了集合中元素的有序性,什么意思呢,举个例子:
在三国中,每一个武将都是有武力值的,我们根据武力值就可以对武将进行一个排名,如下图:
在 zset 类型中,默认是按照**“升序”**的方式排列的,提供了一组获取元素分数、元素范围查询等等功能命令,下面就来介绍一些主要并且常用的命令。
zadd 命令
使用 zadd 命令往有序集合中添加元素和分数,在不指定选项的情况下,如果元素已经存在,则更新分数,如果元素不存在,则添加元素及分数
语法:zadd key [NX | XX] [GT | LT] [CH] [INCR] score member [score member…….]
NX:只能添加新元素,如果元素已经存在,则不能修改已经存在的元素
XX:只能更新已经存在元素,如果元素不存在,不能添加新元素
CH:默认情况下,zadd 返回的是本次成功添加的元素个数,但指定这个选项之后,如果只是更新了分数,那么还会把更新分数的元素给计算上
LT:当前指定的元素必须存在,并且新的分数比当前元素的分数小,才会更新
GT:当前指定的元素必须存在,并且新的分数比当前元素的分数大,才会更新
INCR:将元素的分数加上指定的分数,此时只能指定一个元素和一个分数
score member:表示要添加的元素及分数,并且可以指定多个
操作演示:
- 不指定任何选项
zadd key score member
返回值*:成功添加的元素个数
时间复杂度:log(N),会先查找,再加入
- 指定 nx 选项
zadd key nx score member
返回值:成功添加元素的个数
时间复杂度:log(N),会先查找,再加入
使用 nx 选项添加“赵云”,因为“赵云”存在,所以并没有对 “赵云” 这个元素进行修改
因为 “关羽” 不存在,所以,就可以成功添加 “关羽”
- 指定 xx 选项
zadd key xx score member
返回值:0,就算修改分数成功,也会返回 0
时间复杂度:log(N),会先查找,在加入
使用 xx 选项,添加 “曹操”,因为曹操这个元素已经存在,所以,就只会更新“分数”
因为 “刘备” 不存在,所以,在使用 xx 选项进行添加时,也不会成功添加
- 指定 ch 选项
zadd key ch score member
返回值:成功添加以及更新的元素个数
<