Bel*_*dez 2 python django memcached django-cache django-queryset
我有一个查询,结果每天只改变一次.对于我为该页面获得的每个请求来说,这似乎是一种浪费.我正在调查使用memcached.
我该怎么开始?任何人都有任何建议或陷阱我应该避免使用Django的缓存?我应该在模板或视图中缓存吗?
这个问题可能看起来很模糊,但这只是因为我以前从未处理过缓存.所以,如果有什么东西我可以详细说明,请只问.
Per Ken Cochrane:
此数据的更改频率如何:相关数据将在该日历日期锁定.因此,举例来说,我将提取2011年1月30日的数据,我可以整天提供缓存副本,直到2011年1月31日,它将被刷新.
我是否在多个地方使用此数据:仅在一个视图中.
它将包含多少数据:平均包含大约15个字段的10个模型对象,其中最大的是a CharField(max_length=120).我会将使用的字段数减少values()到大约一半.
通常在我决定在哪里进行缓存之前,我会问自己一些问题.
由于我不知道您的应用程序的所有细节,我将做出一些假设.
有了这些假设,你有3个选择.1.缓存模板2.缓存视图3.缓存查询集
通常当我进行缓存时,我会缓存查询集,这使我可以更好地控制我想要缓存数据的方式,并且我可以在多个地方重用相同的缓存数据.
我发现缓存查询集的最简单方法是在模型管理器中为相关模型执行此操作.我会创建一个像get_calender_by_date(date)这样的方法来处理查询和缓存.这是一个粗略的模型
CACHE_TIMEOUT_SECONDS = 60 * 60 * 24 # this is 24 hours
class CalendarManager(models.Manager):
def get_calendar_by_date(self, by_date):
""" assuming date is a datetime object """
date_key = by_date.strftime("%m_%d_%Y")
cache_key = 'CAL_DATE_%s' % (date_key)
cal_date = cache.get(cache_key)
if cal_date is not None:
return cal_date
# not in cache get from database
cal_date = self.filter(event_date=by_date)
# set cal_date in cache for later use
cache.set(cache_key, cal_date, CACHE_TIMEOUT_SECONDS)
return cal_date
Run Code Online (Sandbox Code Playgroud)
缓存时要注意的一些事项
缓存模板或视图时,您需要注意以下内容
希望这能为您提供足够的信息以便入门.祝好运.
| 归档时间: |
|
| 查看次数: |
1411 次 |
| 最近记录: |