这个Django的缓存功能有什么问题?

时间:2010-02-18 13:00:02

标签: python django caching

我已经创建了用于计算页面视图数量的模型:

class RequestCounter(models.Model):
    count = models.IntegerField(default=0)
    def __unicode__(self):
        return str(self.count)

为了递增计数器,我使用:

def inc_counter():
    counter = RequestCounter.objects.get_or_create(id =1)[0]
    counter.count = F('count') + 1
    counter.save()

然后我在我的页面上显示页面浏览量,它工作正常。 但现在我需要缓存我的计数器一段时间了。我用:

def get_view_count():
    view_count = cache.get('v_count')
    if view_count==None:
        cache.set('v_count',RequestCounter.objects.filter(id = 1)[0],15)
    view_count = cache.get('v_count')
    return view_count

在此之后我将get_view_count的结果传递给我的模板。

所以我希望,我的计数器现在可以保持15秒,然后更改为新值。但实际上,情况并非如此:当我从我的虚拟ubuntu测试它时,它会从55跳到56,在15秒后它会发生变化,现在从87跳到88。 这些值总是交替的,并且彼此之间没有太大差异。 如果我从Windows本地尝试这个,计数器似乎没问题,直到我尝试打开超过浏览器。 不知道该怎么做。你看到了什么问题吗?


P.S。我尝试在模板中使用缓存 - 并收到相同的结果。

1 个答案:

答案 0 :(得分:4)

您使用的是什么CACHE_BACKEND?如果它是locmem://并且您正在运行Apache,那么每个Apache子节点都会有一个不同的缓存活动,这可以解释不同的结果。我不久前有这个,这是一个微妙的工作。我建议你切换到memcache,如果你还没有,因为这不会给你带来多个缓存问题