sorted_set
zadd key score member [score member …],在物理内存,根据分值从小到大,从左往走排,存储地址不随着命令发生变化。
zcount key min max 查找分值从min到max的数量
zscore key member 取得key下某个元素的分值
zincrby key increment member 对某个key下的元素的分值做加法
zrange key start stop 根据下标,取得从start到stop到元素
zrangebyscore key min max 根据分值,取得min到max的key
总结
zset首先是一个集合,但是比set多了排序的功能。包括根据内存存储顺序排序和根据分值排序。
zset是根据分值排序的,如果分值一样,则按照名称的字典序排序。
问题
zset的排序是怎么实现的,zset的增删改查的效率
zset底层是跳表skip list。往跳表插入新的元素的时候,首先会保证最底层有序,然后会随机往上跳层,以空间换取查询的速度。插入到上层元素的时候,找到附近有上层元素的位置,顺着指针找到上层元素,插入到合适的位置。
跳表可以看成是一种类平衡树,依据概率尽可能保证下一层的元素是上一层的2倍。
当整个跳表比较宽,元素比较多的时候,增删改查四个操作的综合平均效率是最稳定的,比其他数据结构要稳定。