根据 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
更新整个哈希键,您可以通过其唯一标识符定位整个对象。
另一方面,哈希中的任何键都必须存在于您的排序集中。当您将一个对象添加到已排序的集合中时,您就是在添加它的唯一标识符。
当您需要按特定顺序列出您的对象时,您可以执行以下操作:
- 您从已排序的集合中获得一页标识符(例如,使用
zrange
)。
- 您从页面中获取所有对象,并将它们的标识符提供给
hmget
命令。
我有大量项目存储在 Redis 排序集中(数量为 100,000),这些项目经常更新。这些项目是编码为 JSON 字符串的对象,集合中排序的等级是从对象上的 date/time 属性 派生的(在插入时,通过我的代码)。
集合中的每个项目都有一个 Id 属性(这是一个编码为字符串的 Guid),它在系统中唯一标识该项目。
更新这些项目时,我需要更新排序集中的项目,或者删除并重新插入项目。我遇到的问题是如何找到那个项目来执行操作。
我目前正在做的是将已排序集合的全部内容加载到内存中,在我的代码中对该集合进行操作,然后将完整的集合写回 Redis。虽然这行得通,但效率不是特别高,而且如果列表开始变得非常大,则无法很好地扩展。
关于如何以更有效的方式执行此操作,有人可以提出任何建议吗?我拥有的物品的唯一唯一标识符是物品中编码的 Id 属性。
非常感谢,
理查德.
可能,您的案例只是一个糟糕的设计选择。
你不应该在排序集中存储 JSON 字符串:你需要存储标识符,并且整个 JSON 序列化对象应该存储在 hash.
这样,当您需要更新一个对象时,您可以使用 hset
更新整个哈希键,您可以通过其唯一标识符定位整个对象。
另一方面,哈希中的任何键都必须存在于您的排序集中。当您将一个对象添加到已排序的集合中时,您就是在添加它的唯一标识符。
当您需要按特定顺序列出您的对象时,您可以执行以下操作:
- 您从已排序的集合中获得一页标识符(例如,使用
zrange
)。 - 您从页面中获取所有对象,并将它们的标识符提供给
hmget
命令。