Django Memcache会话奇怪的行为

时间:2012-08-29 02:33:20

标签: python django caching memcached wsgi

我在django中使用我的缓存获得了一些 weeeeeeird 行为。如果我刷新页面,我会一遍又一遍地获得相同的值(这是一个每次视图被点击时应该增加的int)。但是,如果我使用相同的用户名/密码登录另一个浏览器,我会看到一个递增的数字,但在我再次登录之前它不会增加。我也没有退出,只是打开页面并从另一个浏览器登录。

编辑:每次更改网址时它也会递增(例如,添加斜杠以保持相同的视图)浏览器缓存可能会被禁用。

编辑2:现在超级很奇怪:在我将@never_cache装饰器添加到我的后,在另一个浏览器中打开新页面时,它开始处理每次刷新查看,但是当我切换回apache / wsgi时,它再次停止工作(是的,我重新启动了apache)。

编辑3:现在随机开始在apache下工作...但是在Chrome中如果我将网址设置为尾随/,则会回到x之前的数字刷新。但是,如果我用尾随/刷新铬,它会不断递增。这会是浏览器还是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
        }
    }

对于有关我的问题的更多信息的任何请求,我将密切关注此问题,以便快速得到评论。

Picture is all that I can use to describe the behavior.

1 个答案:

答案 0 :(得分:1)

在您的MIDDLEWARE_CLASSES中,您有django.middleware.cache.UpdateCacheMiddlewaredjango.middleware.cache.FetchFromCacheMiddleware用于页面缓存。这就是为什么当你使用@never_cache装饰器时,你看到这种行为消失了。

你可能已经看到了奇怪的斜线/无斜线问题,因为那些页面仍然在缓存中(如果装饰器与缓存部分的提取交互,我不能100%确定。)

如果你刷新你的缓存,或者甚至把中间件拿出来进行测试,然后再试一次,我敢打赌你会看到你期望的一致增量。