这个Django缓存函数有什么问题?
我创建了一个模型,用来统计我页面的浏览次数:
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上本地测试,计数器似乎正常,直到我尝试打开多个浏览器。 我不知道该怎么处理这个问题。你觉得可能是什么原因呢?
附言:我尝试在模板中使用缓存,结果也是一样。
1 个回答
4
你在用什么缓存后端呢?如果你用的是 locmem://,而且你的服务器是 Apache,那么每个 Apache 的子进程都会有一个不同的缓存,这就能解释为什么结果会不一样。我之前也遇到过这个问题,搞了很久才弄明白。建议你如果还没用的话,可以换成 memcache,这样就不会出现多个缓存的问题了。