Python 什么';Django中的这个缓存函数有什么错误?
我创建了计算页面浏览量的模型:Python 什么';Django中的这个缓存函数有什么错误?,python,django,caching,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]
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\u view\u count的结果传递给我的模板
所以我预计,我的计数器现在会静止15秒,然后变为一个新值。但是,事实并非如此:当我在我的虚拟ubuntu上测试它时,它会从55跳到56,15秒后会发生变化,现在从87跳到88。
这些值总是交替的,它们之间没有太大差异。
如果我从windows本地尝试此操作,计数器似乎没有问题,直到我尝试打开多个浏览器。
我不知道该怎么办。你看到问题出在哪里了吗
p、 我尝试在模板中使用缓存,得到了相同的结果。您使用的是什么缓存?如果是locmem://并且您正在运行Apache,那么每个Apache子级都会有一个不同的活动缓存,这可以解释不同的结果。我前一段时间有过这个,这是一个微妙的解决办法。如果您还没有使用memcache,我建议您切换到memcache,因为这不会给您带来多缓存问题您使用的是什么缓存?如果是locmem://并且您正在运行Apache,那么每个Apache子级都会有一个不同的活动缓存,这可以解释不同的结果。我前一段时间有过这个,这是一个微妙的解决办法。如果您还没有使用memcache,我建议您切换到memcache,因为这不会给您带来多缓存问题没错,我使用的是locmem://而我使用的是Apache。。这是否意味着,如果我切换到memcache或更改CACHE\u后端,我的代码将正常工作?为了能够使用memcached,您必须将您的CACHE\u后端更改为memcache(请参阅Django CACHE文档)。(以及可能设置memecached,但使用apt-get非常简单)。由于memcached由所有Apache线程/子线程共享,因此您的应用程序将只有一组缓存数据,您的问题可能会停止——假设我认为多重locmem缓存是问题的根源:o)是的,谢谢,这解决了问题!这足以改变lockmem=)没错,我正在使用locmem://并且我在Apache上。。这是否意味着,如果我切换到memcache或更改CACHE\u后端,我的代码将正常工作?为了能够使用memcached,您必须将您的CACHE\u后端更改为memcache(请参阅Django CACHE文档)。(以及可能设置memecached,但使用apt-get非常简单)。由于memcached由所有Apache线程/子线程共享,因此您的应用程序将只有一组缓存数据,您的问题可能会停止——假设我认为多重locmem缓存是问题的根源:o)是的,谢谢,这解决了问题!这足以更改lockmem=)