Redis 中的 zset 数据结构详解

阅读时长 5 分钟读完

Redis 是一款高性能的 key-value 存储系统,提供了多种数据结构来满足不同的应用场景。其中,zset 是一种有序集合,能够快速地进行范围查找和排名操作,被广泛用于排行榜、计分板等场景。

zset 的基本概念

zset 是一种键值对集合,其中每个键都对应一个唯一的值(称为 score),并按照 score 的大小进行排序。zset 的实现方式是使用一颗跳跃表(Skip List)和一个哈希表(Hash Table)来维护数据结构。

zset 中的元素是唯一的,相同 score 的元素按照插入顺序排列。每个元素都包含两个属性:一个是 member(成员),另一个是 score(分数)。其中,member 是一个字符串,score 是一个浮点数。

zset 的常用操作

添加元素

使用 ZADD 命令向 zset 中添加元素,可以同时添加多个元素,支持批量操作。例如:

删除元素

使用 ZREM 命令从 zset 中删除元素,同样支持批量操作。例如:

获取元素个数

使用 ZCARD 命令获取 zset 中元素的个数。例如:

获取元素的 score

使用 ZSCORE 命令获取 zset 中指定元素的 score。例如:

获取排名

使用 ZRANK 或 ZREVRANK 命令获取 zset 中指定元素的排名(从小到大或从大到小)。例如:

获取指定范围的元素

使用 ZRANGE 或 ZREVRANGE 命令获取 zset 中指定范围内的元素(从小到大或从大到小)。例如:

获取指定分数范围的元素

使用 ZRANGEBYSCORE 或 ZREVRANGEBYSCORE 命令获取 zset 中指定分数范围内的元素(从小到大或从大到小)。例如:

获取指定排名范围的元素

使用 ZRANGE 或 ZREVRANGE 命令获取 zset 中指定排名范围内的元素(从小到大或从大到小)。例如:

获取指定成员的排名和分数

使用 ZRANK 和 ZSCORE 命令一起获取 zset 中指定成员的排名和分数。例如:

zset 的应用场景

排行榜

zset 最常见的应用场景就是排行榜。例如,游戏中的积分排名、音乐网站中的歌曲排行榜等。通过将用户的分数作为 score,将用户的 ID 作为 member,就可以很方便地实现排行榜功能。

计分板

类似于排行榜,计分板也是一种常见的应用场景,例如网站上的评分、投票等。通过将分数作为 score,将用户 ID 或者投票对象的 ID 作为 member,就可以很方便地实现计分板功能。

示例代码

下面是一个使用 zset 实现排行榜的示例代码:

-- -------------------- ---- -------
----- ----- - -----------------
----- ------ - ---------------------

-- ------
------------------- ---- ---------
------------------- ---- ---------
------------------- ---- ---------

-- ------
-------------------- -------- ----- ------ -- -
  ------------------ ------- -------
---

-- ------
--------------------- -------- ----- ------ -- -
  ------------------ -------- -------
---

-- -------
--------------------- -- -- ----- ------ -- -
  ---------------- - -------- -------
---
展开代码

通过以上代码,我们可以向排行榜中添加用户分数、获取用户排名和分数、以及获取前三名用户。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67cadc8ee46428fe9e36fba1

纠错
反馈

纠错反馈