2012-09-28 83 views
0

我在我的django项目中缓存了一些模型的一堆查询。看起来,缓存本身正在工作,但是当我想通过添加一个新的模型对象来进行测试时,我注意到在模型创建之后,查询列表被更新为包含新模型,这应该是不正确的,因为高速缓存超时设置为1个小时。memcached和django缓存混淆

我们必须等待1小时才能看到新模型?这里是代码:

def home(request, filterBy = 'all', sortBy = 'popularity'): 
    if not cache.get('home' + filterBy + sortBy): 
     models = Model.objects.with_rankings(filterBy, sortBy, request) 
     cache.set('home' + filterBy + sortBy, models, 3600) # 1 hour 
    else: 
     models = cache.get('home' + filterBy + sortBy) 

谢谢。

+0

缓存通常是关闭的。你正在运行memcached守护进程吗? settings.py中的缓存设置是什么样子的? –

+0

调试是真实的,缓存被daemonized,虽然。 –

回答

3

请记住,如果缓存中没有值,则cache.get(key)返回None不为False或其他任何值。而你没有检查它,你只是检查返回的值是否为真或不是。空的QuerySet也是错误的,可能是你的情况。

应该(也实在是一个缓存得到以内):测试/开发过程中

def home(request, filterBy = 'all', sortBy = 'popularity'): 
    models = cache.get('home' + filterBy + sortBy) 
    if models is None: 
     models = Model.objects.with_rankings(filterBy, sortBy, request) 
     cache.set('home' + filterBy + sortBy, models, 3600) # 1 hour 
+0

此外,作为一个经验法则,当缓存中没有值时,几乎每个缓存库都将返回None而不是False。你应该总是阅读图书馆的文档,但这是公认的和预期的做法。 –

+0

,但与'not []'或'not 0'相同 – jasisz