我有大量项目存储在Redis排序集(100,000的订单)中,这些项目经常得到更新。这些项是编码为JSON字符串的对象,并且从对象的日期/时间属性派生(在插入时,通过我的代码)集合中的排序等级。
集合中的每个项目都有一个Id属性(编码为字符串的Guid),它唯一地标识系统中的项目。
更新这些项目后,我需要更新已排序集合中的项目,或者删除并重新插入该项目。我遇到的问题是如何找到该项来执行操作。
我目前正在做的是将已排序集的全部内容加载到内存中,在我的代码中对该集合进行操作,然后将完整集合写回Redis。虽然这种方法有效,但如果列表开始变得非常大,它就不会特别有效并且不会很好地扩展。
对于如何以更有效的方式做到这一点,有人会有任何建议吗?我对项目唯一的唯一标识符是项目中编码的Id属性。
非常感谢,
理查德。
答案 0 :(得分:3)
可能你的情况只是一个糟糕的设计选择。
您不应该在已排序的集合中存储JSON字符串:您需要存储标识符,并且整个JSON序列化对象应存储在哈希中。
这样,当您需要更新对象时,使用hset
更新整个哈希键,您可以通过其唯一标识符找到整个对象。
另一方面,哈希中的任何键都必须出现在已排序的集合中。将对象添加到已排序的集合时,您将添加其唯一标识符。
如果需要按特定顺序列出对象,请执行以下操作:
zrange
)。hmget
命令。