从基于JSON属性的Redis排序集中删除

时间:2015-08-27 07:55:38

标签: json redis sortedset

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

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

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

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

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

非常感谢,

理查德。

1 个答案:

答案 0 :(得分:3)

可能你的情况只是一个糟糕的设计选择。

您不应该在已排序的集合中存储JSON字符串:您需要存储标识符,并且整个JSON序列化对象应存储在哈希中。

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

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

如果需要按特定顺序列出对象,请执行以下操作:

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