Redis 如何获取foo中的所有哈希:*使用单个id计数器而不是集合/数组 介绍
我的域名有Redis 如何获取foo中的所有哈希:*使用单个id计数器而不是集合/数组 介绍,redis,Redis,我的域名有文章,它们有标题和文本。每篇文章都有修订版(如SVN概念),因此每次对其进行更改/编辑时,这些更改都将存储为修订版。修订由变更和这些变更的说明组成 我希望能够一次获得所有修订说明 有什么问题吗? 我确信我会将修订版作为散列存储在文章:修订版:中,存储更改,以及说明。 我不确定的是如何一次获得所有描述。 我有很多选择,但没有一个能让我信服 将文章的修订ID存储为一个集合,并使用排序文章:修订:idSet BY NOSORT GET articles:revisions:->descrip
文章
,它们有标题
和文本
。每篇文章都有修订版
(如SVN
概念),因此每次对其进行更改/编辑时,这些更改都将存储为修订版
。修订由变更
和这些变更的说明
组成
我希望能够一次获得所有修订说明
有什么问题吗?
我确信我会将修订版
作为散列存储在文章:修订版:
中,存储更改
,以及说明
。我不确定的是如何一次获得所有
描述。
我有很多选择,但没有一个能让我信服
将文章的修订ID存储为一个集合,并使用排序文章:修订:idSet BY NOSORT GET articles:revisions:->description
。这意味着我将为每篇文章存储一个集合。如果每篇文章都有50个修订版本,而我们有10000篇文章,那么我们将存储500000个ID李>
这是最好的方式吗?这不是消耗了太多的内存吗
我有其他的想法,但我也不认为它们好。
从0迭代到上一版本的id,使用MULTI
对每个id执行HGET
为特定文章创建idSet如果它不存在并且是请求的,则在一段时间后过期
redis是否有办法通过NOSORT GET对数组进行排序,数组是[0,MAX]形式的临时数组?看起来您有一个很好的解决方案。
只要您保持这些id数小于,并且集合的元素数小于512个(set max intset条目),您的内存消耗就会比您想象的低得多
这是一个很好的解释。使用TRIE或DAWG可以以比Redis更好的优化方式解决这一问题。我不知道您的应用程序或其他关于您的搜索问题的信息(例如,构建时间、搜索失败、更新性能)
如果您的搜索频率远远超过了更新/插入查找存储所需的频率,我建议您将DAWGDIC[1]视为一个库,并使用字符串格式构建“搜索路径”(类似于您已经描述的),该字符串格式可在以后完成搜索:
articleID:revisionID:"changeDescription":"change"
示例(我假设您每个修订版有一个描述,并且有n个更改。从您的问题中我不清楚):
注意:即使您使用重复的前缀构造这些字符串,DAWG也会以非常节省空间的方式存储它们(简单地说,它会将字符串的右侧附加到数据结构中,并为公共前缀创建快捷方式,有关TRIE数据结构的比较,请参见[2])
要列出第1条第2版的更改,请为查找设置公共前缀:
completer.Start(index, "1:2");
现在,您可以简单地调用completer.Next()来查找共享相同前缀的下一条记录,并调用completer.value()来获取该记录的值。在我们的示例中,我们将得到:
1:2:"Some changes":"Added two sentences here, removed one sentence there"
1:2:"Some changes":"Fixed article title"
当然,您需要自己将字符串解析到数据对象中
也许这不是你要找的,而且太过分了。但是,如果它满足您的要求,它可以是一种非常节省空间和搜索性能的方法
[1]
[2] 您真的想获取所有描述而不是最后的X描述吗?您似乎更关注内存消耗,而不是获取数据的性能,这是故意的吗?
1:2:"Some changes":"Added two sentences here, removed one sentence there"
1:2:"Some changes":"Fixed article title"