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

Delete from Redis Sorted Set based on JSON Property

我有大量项目存储在 Redis 排序集中(数量为 100,000),这些项目经常更新。这些项目是编码为 JSON 字符串的对象,集合中排序的等级是从对象上的 date/time 属性 派生的(在插入时,通过我的代码)。

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

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

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

关于如何以更有效的方式执行此操作,有人可以提出任何建议吗?我拥有的物品的唯一唯一标识符是物品中编码的 Id 属性。

非常感谢,

理查德.

可能,您的案例只是一个糟糕的设计选择。

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

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

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

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

  1. 您从已排序的集合中获得一页标识符(例如,使用 zrange)。
  2. 您从页面中获取所有对象,并将它们的标识符提供给 hmget 命令。