根据 JSON 属性从 Redis 排序集中删除

Ric*_*ish 1 json sortedset redis

我有大量的项目存储在 Redis 排序集中(数量级为 100,000),并且更新得相当频繁。这些项目是编码为 JSON 字符串的对象,并且集合中的排序排名是从对象的日期/时间属性派生的(在插入时,通过我的代码)。

集合中的每个项目都有一个 Id 属性(它是编码为字符串的 Guid),它在系统中唯一标识该项目。

当这些项目更新时,我需要更新排序集中的项目,或者删除并重新插入该项目。我遇到的问题是如何找到该项目来执行操作。

我当前正在做的是将排序集的全部内容加载到内存中,在我的代码中对该集合进行操作,然后将完整的集合写回 Redis。虽然这有效,但它不是特别有效,并且如果列表开始变得非常大,则无法很好地扩展。

有人对如何以更有效的方式做到这一点有任何建议吗?我拥有的项目的唯一唯一标识符是项目中编码的 Id 属性。

非常感谢,

理查德.

Mat*_*zer 5

也许,你的情况只是一个糟糕的设计选择。

您不应该将 JSON 字符串存储在排序集中:您需要存储标识符,并且整个 JSON 序列化对象应该存储在 hash

这样,当您需要更新对象时,您可以使用更新整个哈希键,hset并且可以通过其唯一标识符来定位整个对象。

另一方面,哈希中的任何键都必须存在于排序集中。当您将对象添加到排序集中时,您将添加其唯一标识符。

当您需要按特定顺序列出对象时,您可以执行以下操作:

  1. 您可以从排序集中获取一页标识符(例如,使用zrange)。
  2. 您可以从页面中获取所有对象,并将其标识符传递给命令hmget