美文网首页
(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原理

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

  • redis-zset(有序集合)

    redis-zset(有序集合) 介绍 类似于java的sortset和hashmap的结合体 原理 内部使用跳跃...

  • 动手实现 Redis 跳表(Go 语言)

    引言 总的来说,Redis 的 zset 实现中,选用「跳表」的主要原因如下: 原理清晰易懂,且容易实现,方便维护...

  • 通过redis的有序集合[zset] 实现延迟队列

    php使用redis的有序集合zset实现延迟队列 我们通过redis的有序集合zset来实现简单的延迟队列,将消...

  • t_zset.c

    Redis的t_zset.c是对zset数据结构的实现。zset是由 dict 和zskiplist来实现的。 当...

  • redis zset

    有序集合 特点 key score value 重要API Z zadd key score element(可以...

  • 亿级流量电商系统多级缓存架构

    Redis基础 数据类型String hash list set zset java操作Redis redis的R...

  • Redis自我学习

    Redis Redis 的主要五种数据类型 String Hash List Set Zset Redis 的扩展...

  • Redis面试题

    Redis支持的数据类型? String、List、Set、Hash、zSet 什么是Redis持久化?Redis...

  • Redis有序集合zset应用场景

    一、zset(sorted set:有序集合) Redis zset和Set一样也是String类型元素的集合,且...

网友评论

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

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