【发布时间】:2016-07-25 20:31:54
【问题描述】:
在我的一个 Django 网站上,用户贡献了帖子,然后这些帖子在主页上全局显示,按最近的排序在前。
我通过将所有 post_ids 的lpush 加入到 redis 列表中来将 redis 引入到这个组合中(该列表被修剪为 1000 个条目)。代码是:
def add_post(link_id):
my_server = redis.Redis(connection_pool=POOL)
my_server.lpush("posts:1000", link_id)
my_server.ltrim("posts:1000", 0, 9999)
然后,当用户请求首页的内容时,我简单地在相关的基于类的视图的get_queryset方法中执行如下查询:
Post.objects.filter(id__in=all_posts())
all_posts() 就是这样:
def all_posts():
my_server = redis.Redis(connection_pool=POOL)
return my_server.lrange("posts:1000", 0, -1)
接下来,我在 Django 模板(即{% for post in object_list %} 中迭代context["object_list"],并一一填充最新帖子供我的用户查看。
我的问题是这种安排不会首先显示最近的。它总是最后显示最近的。所以我将lpush改为rpush,但结果根本没有改变。为什么不改变redis的列表插入方法改变Django的查询集返回的结果的顺序我?
也许我遗漏了一些基本的东西。请告诉我发生了什么,以及我该如何解决这个问题({% for post in object_list reversed %} 我在这里唯一的选择)。我选择 redis 路线的原因自然是性能。在 redis 之前,我会这样做:Post.objects.order_by('-id')[:1000]提前致谢。
注意:如果需要,请询问更多信息。
【问题讨论】:
标签: django redis django-views django-queryset