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

基于JSON属性从Redis排序集中删除,json,redis,sortedset,Json,Redis,Sortedset,我有大量的项目存储在一个Redis排序的集合中,该集合的顺序为100000,更新频率相当高。这些项是编码为JSON字符串的对象,集合中排序的秩在插入时由我的代码从对象的日期/时间属性派生 集合中的每个项都有一个Id属性,该属性是编码为字符串的Guid,该字符串唯一标识系统中的项 更新这些项时,我需要更新排序集中的项,或者删除并重新插入该项。我的问题是如何找到该项来执行操作 我目前正在做的是将排序集的全部内容加载到内存中,在代码中对该集合进行操作,然后将整个集合写回Redis。虽然这是可行的,但它

我有大量的项目存储在一个Redis排序的集合中,该集合的顺序为100000,更新频率相当高。这些项是编码为JSON字符串的对象,集合中排序的秩在插入时由我的代码从对象的日期/时间属性派生

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

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

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

对于如何以更有效的方式进行这项工作,有人有什么建议吗?我为这些项目拥有的唯一唯一标识符是项目中编码的Id属性

非常感谢,


理查德。

也许,你的箱子只是一个糟糕的设计选择

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

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

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

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

例如,可以使用zrange从排序集获取一页标识符。 您可以从页面获取所有对象,并将其标识符提供给hmget命令。
也许,您的案例只是一个糟糕的设计选择

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

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

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

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

例如,可以使用zrange从排序集获取一页标识符。 您可以从页面获取所有对象,并将其标识符提供给hmget命令。
建议使用散列来存储ID->JSON数据,但不是强制性的,因为可以使用字符串将每个ID的JSON存储在自己的键下。也就是说,就RAM而言,哈希更可取,因为Redis的每键开销。@ItamarHaber嘿,进展如何;是的,我一直在使用字符串键方法,直到我意识到HASE更好,这不仅是因为内存优化,还因为当你可以将它们组织在一起时,谁会想要一个被数以百万计的键污染的全局键空间呢subkeys@ItamarHaber嗯,你说得对。。。这就是我的情况,我使用散列来按某个键属性存储序列化对象,然后需要按某些条件获取它们。这就是为什么我倾向于使用哈希排序集,或者只是一个集合、列表,或者其他任何方法。你完全正确,这是一个糟糕的设计选择——我来自SQL世界,这是我用Redis写的第一件事。我不会再这样做了,我认为是时候按照@MatíasFidemraizer建议的方式重新实现了。@RichardComish好吧,你会发现,一旦你习惯了使用简单的数据结构,SQL会让你觉得一团糟;p建议使用散列来存储ID->JSON数据,但不是强制性的,因为您可以使用字符串将每个ID的JSON存储在自己的密钥下。也就是说,就RAM而言,哈希更可取,因为Redis的每键开销。@ItamarHaber嘿,进展如何;是的,我一直在使用字符串键方法,直到我意识到HASE更好,这不仅是因为内存优化,还因为当你可以将它们组织在一起时,谁会想要一个被数以百万计的键污染的全局键空间呢subkeys@ItamarHaber嗯,你说得对。。。这就是我的情况,我使用散列来按某个键属性存储序列化对象,然后需要按某些条件获取它们。这就是为什么我倾向于使用哈希排序集,或者只是一个集合、列表,或者其他任何方法。你完全正确,这是一个糟糕的设计选择——我来自SQL世界,这是我用Redis写的第一件事。我不会再这样做了,我认为现在是时候以@MatíasFidemraizer建议的方式重新实现了。@RichardComish好吧,一旦你习惯了使用简单的数据 结构,SQL将为您带来混乱;P