在我的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
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
,而不是每当用户想要在一天看到Entry
列表时执行数据库命中。如何设置缓存的密钥?我应该使用由username+creationdate
制作的字符串作为密钥吗?
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)
....
答案 0 :(得分:2)
是的,你有正确的想法。一般原则是,对于可能产生不同结果的每个查询,您的缓存键需要不同。在这里,您的查询仅依赖于creationdate
和request.user
,因此只要这两个都在密钥中,那么您就可以设置。
但是,您还需要确保为此函数使用缓存生成的密钥与Django部署的其他部分使用的密钥不同。所以你还应该包含某种命名空间。例如,类似于此的东西:
"per-day-entries-{0}-{1}".format(request.user.username, creationdate)