我在django的缓存里有几周的行为。如果我刷新页面,我会一遍又一遍地得到相同的值(这是一个int值,应该在每次访问视图时都会递增)。但是,如果我使用相同的用户名/密码登录到另一个浏览器,我会看到一个递增的数字,但直到我再次登录,它才会递增。我也从来没有退出过,只是让页面保持打开状态,然后从另一个浏览器登录。
编辑:每次我更改url(例如添加斜线以保持在同一视图中)浏览器缓存都会被禁用。
编辑2:NowSuper怪异:在我的视图中添加了@never_cache
装饰器之后,当我在另一个浏览器中打开一个新页面时,它开始处理每次刷新,但是当我切换回apache/wsgi时,它再次停止工作(是的,我重新启动了apache)。
编辑3:现在在apache下随机开始工作。。。但在chrome中,如果我将url设置为尾随的/
,它将返回到x刷新之前的数字。但是,如果我在chromium中刷新并拖尾/
,它将继续递增。这是浏览器还是apache缓存?
视图代码:
from django.core.cache import cache
if cache.get('counter') != None:#0 needs to let this pass
cache.incr('counter')
else:
cache.set('counter', 0)
return HttpResponse(cache.get('counter'))
相关设置:
MIDDLEWARE_CLASSES = (
'django.middleware.cache.UpdateCacheMiddleware', #cache middleware
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',) #cache middleware
CACHE_BACKEND = 'memcached://127.0.0.1:11211/'
CACHES = {'default':{
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211', #this is the default port for memcache
'TIMEOUT': '1800' #30 Minutes
}
}
我会密切关注这个问题,以获取有关我的问题的更多信息,因此评论会很快得到答复。
最佳答案
在MIDDLEWARE_CLASSES
中有django.middleware.cache.UpdateCacheMiddleware
和django.middleware.cache.FetchFromCacheMiddleware
用于页面缓存。这就是为什么当您使用@never_cache
装饰器时,看到行为消失的原因。
您可能已经看到了奇怪的斜杠/无斜杠问题,因为那些页面仍然在缓存中(我不确定装饰器是否与从缓存获取部分交互)。
如果你刷新你的缓存,甚至取出中间产品进行测试,然后再试一次,我敢打赌你会看到一个一致的增量,你期望的。