美文网首页
(3)Redis zset原理

(3)Redis zset原理

作者: hedgehog1112 | 来源:发表于2020-11-12 08:21 被阅读0次

    Sorted Set,和set相比,增加权重参数score(浮点数)有序排列。Redis唯一可根据成员访问,又可以根据分值排序,访问元素结构。

    场景:在线用户列表,各种礼物排行榜,弹幕消息(可以理解为按消息维度的消息排行榜)等信息,适合使用Redis中的SortedSet结构进行存储。

    概要:原理(ziplist,skiplist,例子,操作)、  红黑树比较、    score相同,怎么排序

    一、实现原理

    底层ziplist   或  HashMap和跳跃表(SkipList)有序集合 

    1、ziplist

    元素数<128个,所有成员长度<64字节。都可通过zset-max-ziplist-entries和zset-max-ziplist-value来修改。

    紧凑压缩列表节点来保存,第一个节点存member,第二个存score,按score从小到大排序

    2、skiplist

    底层是zset(1字典,跳跃表)和一个。

        1)HashMap:成员score映射     O(1),共享相同元素member和score,因此不会浪费额外的内存

        2)跳跃表:放所有成员,依据HashMap的score,查找效率高,链表增加跳跃功能,O(logN)

    3、具体例子

    新链表,包含原来一半,沿新查。遇大节点,回原查。7比较,19比较,比26小,回原链),比22要大,23比26小,23不存在

    再增加,第三层链表:查快插/删重新进行调整,退化O(n)。

    解决办法:不要求上下相邻链表间,节点个数严格对应,如,一个节点随机出层数3,那么就把它链入到第1层到第3层这三层链表中。

    插入,不影响其它节点层数。只修改插入节点前后指针,降低插入复杂度。插入性能明显优于平衡树

    查:若干层稀疏链表,先查高层,逐层降低,最终降到第1层。跳一些节点,加快速度。实际按key(score)排序

    基本操作

    二、平衡树(红黑树)比较

    1、内存:占更,更新更节约、更灵活

    2、ZRANGE或ZREVRANGE操作,跳表作为链表遍历,和平衡树一样

    3、简单:易于实现,调试。

    4、插入/删除,不需调整很多

    (1)AVL查询效率严格O(logN),插入需多次旋转,导致插入效率较低,才有更实用红黑树

    (2)红黑树并发环境不方便,更新数据时,Skip更新较少,锁的也少,而红黑树有平衡的过程(涉及到较多节点),锁住更多节点,降低并发性

    (3)SkipList优势实现简单,红黑树2天,SkipList2个小时实现。

    三、score相同,怎么排序?

    用字典排序,“ABCDEFG”,首字母相同,比较后面的

    https://www.jianshu.com/p/cc379427ef9d

    https://blog.csdn.net/liyuxing6639801/article/details/105252293

    相关文章

      网友评论

          本文标题:(3)Redis zset原理

          本文链接:https://www.haomeiwen.com/subject/dldhbktx.html