我有一个分页的Django论坛,用户的帖子根据最近的发帖时间累积。我每页显示20个帖子。在高峰时间,每隔2秒就保存一篇新文章,而页面每秒最多可请求查看11次。
我想通过引入缓存来减少数据库命中。我注意到大部分流量都会在第一页出现,所以这就是我要缓存的页面。本质上,我计划在每次写入时set
缓存中的第一页,并在查看者希望使用它时get
。我有redis
和{
我的问题是如何缓存和服务只是第一页。我的未缓存代码如下:
#object_list has up to 1000 object ids at a time
paginator = Paginator(object_list, 20) #pass list of obj ids & no. of objs/page
page = request.GET.get('page', '1')
try:
page = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
page = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
page = paginator.page(paginator.num_pages)
page_contents = retrieve_posts(page.object_list) #retrieve 20 objects
如果页码是1,下面将尝试检查缓存。如果找不到,将向数据库发出请求。在
还不清楚你的queryset是什么样子。但除非有令人信服的证据表明这是一个缓慢的查询,否则这是过早的优化。使用主键从数据库检索项目非常快。由于每秒必须使缓存失效两次,这一开销可能会使它不值得这样做。在
相关问题 更多 >
编程相关推荐