1

在我的 django 应用程序中,登录用户可以创建一个Entry具有以下属性的

from django.db import models
from datetime import date
from django.contrib.auth.models import User 
class Entry(models.Model):
    creationdate=models.DateField(default=date.today)
    description=models.TextField()
    author=models.ForeignKey(User,null=True)

在我看来,用户可以检索Entry特定日期的所有 s

def entries_on_ a_day(request,year,month,day):
    #month as 'jan','feb' etc
    ...
    entries_for_date = Entry.objects.filter(creationdate__year=year,creationdate__month=get_month_as_number(month),creationdate__day=day,author=request.user).order_by('-creationdate')
    ...

现在,我需要使用cache它,而不是每次用户想在一天内查看Entrys 列表时都进行数据库访问。我应该如何设置缓存的键?我应该使用由username+creationdateas 键组成的字符串吗?

from django.core.cache import cache

def entries_on_ a_day(request,year,month,day):
    creationdate=new date(year,get_month_as_number(month),day)
    key = request.user.username+ str(creationdate)
    if key not in cache:
        entries_for_date = Entry.objects.filter(creationdate__year=year,creationdate__month=get_month_as_number(month),creationdate__day=day,author=request.user).order_by('-creationdate')
        cache.set(key,entries_for_date)
    entries =  cache.get(key)
    ....
4

1 回答 1

2

是的,你有正确的想法。一般原则是,对于可能产生不同结果的每个查询,您的缓存键需要不同。在这里,您的查询只依赖于creationdateand request.user,因此只要这两个都在键中,那么您就设置好了。

但是,您还需要确保为此函数使用缓存生成的密钥与 Django 部署的其他部分使用的密钥不同。所以你还应该包括某种命名空间。例如,类似这样的东西:

"per-day-entries-{0}-{1}".format(request.user.username, creationdate)
于 2012-11-10T07:00:54.983 回答