与memcached和django缓存混淆

时间:2012-09-28 15:28:11

标签: python django memcached

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

在看到新车型之前,我们不得不等待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)

谢谢。

1 个答案:

答案 0 :(得分: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