假设我的Redis数据库中有5个条目:
news::id
:上次新闻的ID; news::list
:所有新闻ID的列表; news:n
其中 n 是新闻ID:包含title
,url
等字段的哈希值; news:n:upvotes
:投票新闻的所有用户ID的列表,从而给出了upvotes的数量。news:n:downvotes
:下载新闻的所有用户ID的列表,从而给出了downvotes的数量。然后我有多个排名算法,其中rank =
:
upvotes_count
; upvotes_count - downvotes_count
; upvotes_count - downvotes_count - age
; upvotes_count / downvotes_count
; age
。现在我如何根据这些算法对这些新闻进行排序?
我考虑过在每张选票上计算不同的等级,但如果我引入新的算法,我需要计算所有新闻的新等级。
EVAL
可以提供帮助,但在v2.6之前它无法使用,我当然不想等待。
最终,我可以检索所有新闻并将它们放入Python列表中。但它又转化为高内存使用率,更不用说Redis将其数据存储在内存中了。
有没有正确的方法来实现这一点,还是应该转移到MongoDB?
答案 0 :(得分:0)
您可以按存储在键中的常量进行排序。
在您的示例中,我可以使用Redis轻松地对1.
进行排序。如果在计算它们之后存储其他表达式值,则也可以按它们排序。对于1.
,您需要在某处存储列表计数,我将假设为news:n:upvotes:count
。
捕获是使用SORT命令。例如,第一种是:
SORT news::list BY news:*:upvotes:count GET news:*->title GET news:*->url
...以新月顺序获得以upvotes排序的标题和网址。
还有修饰符,用于alpha
排序和asc/desc
排序。完全阅读命令页面,这是值得的。