为什么在Redis中要使用Sorted Set而不是List

9

为什么我会使用一个按Unix时间戳对文章进行排序的Redis有序集合而不是将元素推送到Redis列表上。它们似乎提供相同的结果。我注意到一个问题是,使用Redis有序集合您可以对其他集合和有序集合执行交集操作。


  1. 使用排序集合,您可以确保文章是唯一的 - 这在列表中是不可能的。
  2. 在列表中,您按照推入列表的顺序进行排序,而使用集合可以按其他标准进行排序 - 例如受欢迎程度。
- Mark Setchell
2个回答

11

取决于之后的使用情况。

按插入顺序对ZSET进行排序并使用LIST可能看起来很相似,但是它们有许多不同之处。以下是一些例子:

  1. LIST可以有重复项。
  2. 在ZSET中检查元素是否存在非常高效,但在LIST中非常昂贵(尤其是如果元素不存在)。
  3. 从LIST中提取非边缘元素可能会很慢(取决于LIST的大小和对象与边缘之间的距离)。
  4. L / R PUSH / POP时,LIST的效率最高。
  5. ZSET具有联合和交集的附加功能,并且可以按任何其他分数/权重进行排序。
  6. 在ZSET中,分数可以稍后更新,顺序将更改。

一般来说,查看每个数据类型提供的API,并选择为您需要的结果提供最佳结果的那个(除了按插入时间排序)。


4

有序集合确保键是唯一的。如果您想要做一些复杂的事情。例如,每当用户登录时,您将userid添加到有序集合中。并且有一个后端服务读取排序集并更新用户的信息和行为习惯。如果您使用有序集合,则可以节省大量工作。

此外,如果用户是高级付费会员,则可以将其id的分数设置得更高,并更早地刷新此用户的行为匹配。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接