可以通过help命令查看一下这种数据类型有哪些命令,如下图:
一.ZADD:添加元素。
这里面关于元素的添加,不单是元素还包含改元素在需要哪个维度排序对应的分值。比如一个水果合集,包含苹果、香蕉、梨,希望在价格方面做一下排序,苹果4块钱,香蕉10块钱,梨6块钱,这个时候应该如下添加:
二.ZREVRANGE:反向排序显示
显示如下:
问题:价格由低到高,显示前两种水果。
方案:有如下两种展示方式,按照之前设定的值,应该显示为苹果、梨。这里的原因是物理内存是左小右大的,该链表底层存储的顺序为苹果、梨、香蕉。正向取是从苹果开始取前两个,反向取是从香蕉开始取后两个,所以得出的顺序不一致,反向取的是不对。
三.ZRANGEBYSCORE:显示满足指定范围分值的元素
简单举例如下,包括边界值。
四.ZSCORE:显示指定元素的分值
五.ZRANK:显示指定元素的排名(从0开始)
六.ZINCRBY:给元素的分值增加指定值
简单举例如下,要增加的值 在元素前:
七.ZUNIONSTORE:集合操作
因为是多维的集合,所以在进行集合操作的时候,要注意权重和聚合指令,这里只用ZUNIONSTORE做一下简单举例
1.先创建两个集合:
2.然后取两个集合的合集,不指定权重和聚合指令,可以发现默认权重都是1,默认的聚合指令为sum:
3.再次取两个集合的合集,这次指定权重,但不指定聚合指令。lisi期中80分,期末60分,按照期中权重0.5和期末权重1来计算,80*0.5+60*1=100。
4.再次取两次集合的合集,这次指定权重和聚合指令。lisi期中80分,期末60分,按照期中权重0.5和期末权重1来计算,MAX(80*0.5,60*1)=60
=========================================================================================
sorted_set的底层是通过的skiplist(跳跃表)实现的。牺牲了一部分存储空间来换取查询速度。
在有很多元素的增删改操作时,跳跃表的平均值是比较稳定的。