Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么';Django中的这个缓存函数有什么错误?_Python_Django_Caching - Fatal编程技术网

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=)