redisJava

字节面试,Redis 的 ZSET 怎么实现的?

2022-04-28  本文已影响0人  一只程序猿哟

Redis的数据类型和数据结构

Redis有五种数据类型,String(字符串)、List(列表)、Hash(哈希)、Set(集合)和Sorted Set(有序集合)。

Redis的底层数据结构有6种,分别是简单动态字符串、双向链表、压缩列表、哈希表、跳表和整数数组。

image.png

ZSet的实现

ZSet 有两种不同的实现,分别是 ziplist 和 skiplist。

image.png image.png

压缩列表(Ziplist)

image.png

跳跃表(Skiplist)

skiplist本质上是并行的有序链表,但它克服了有序链表插入和查找性能不高的问题,跳跃表中查询、插入任意数据的时间复杂度都是 O(logn)

image.png

应用场景

1、 排行榜:有序集合经典使用场景。例如视频网站需要对用户上传的视频做排行榜,榜单维护可能是多方面:按照时间、按照播放量、按照获得的赞数等。

2、用Sorted Sets来做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。

上一篇下一篇

猜你喜欢

热点阅读