redis - 有没有办法用哈希来模拟列表的修剪功能?有没有更好的数据结构呢?

标签 redis

我正在为我的产品创建 feed,很像 Facebook 的新闻 feed。

起初,我是通过一个列表来实现它的。

每个提要最多包含 30 个帖子并包含一堆评论。插入列表并修剪列表以保持最多只有 30 个帖子的事实很容易。一个细微差别是添加评论,但我遇到的真正大问题是如果有人要求删除帖子则删除帖子。无法保证帖子在其整个生命周期中保持不变。这让生活变得非常麻烦。我仍然没有一个好的解决方案来删除列表。

然后,我决定使用哈希值。哈希值很棒,因为它会按照帖子进入哈希值的时间顺序保持哈希值(因此,它基本上是按时间排序的)。此外,我可以轻松查找帖子、添加评论、删除帖子,然后继续我的一天。除此之外,我需要能够限制哈希中的帖子数量。有没有办法将列表的修剪方法复制到哈希?我希望从哈希中删除最旧的帖子。

也许,我仍然没有使用正确的数据结构?

最佳答案

哈希不是有序的数据结构,它肯定不会使您的 key 保持有序。您正在寻找的可能是 sorted set (它是字典(即哈希)和跳过列表的组合。只需使用时间戳作为排序集的分数。

您可以使用 ZREMRANGEBYRANK(按相对位置)或 ZREMRANGEBYSCORE(按时间戳的绝对值)轻松修剪排序集。

关于redis - 有没有办法用哈希来模拟列表的修剪功能?有没有更好的数据结构呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25453793/

相关文章:

redis - 如果 set 中有那么多(count)元素,如何将 spop 命令与 count 一起使用

django - 多个Django View 之间的fakeredis

redis - Pakyow App Redis 错误

amazon-web-services - 在 AWS ElastiCache Redis 集群上启用集群模式

c# - ServiceStack.Redis 类型的客户端不保存值

laravel - 在 laravel 中每次测试后重置 Redis 数据库

redis zrank : Floating-Point Numbers May Lose Precision

redis - 如何在 Redis 服务器中存储当前日期时间数据

php - 如何在 laravel 中监听所有队列?

redis - 是否可以减少 Redis 中的 HyperLogLog 集