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"