3

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

编辑:每次我更改 url 时它也会增加(例如添加斜杠以保持在同一视图中) 浏览器缓存应该被禁用。

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

编辑3:现在随机开始在apache下工作......但是在chrome中,如果我将url设置为尾随/,它会回到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
        }
    }

我将密切关注此问题,以获取有关我的问题的更多信息的任何请求,因此评论将很快得到答复。

图片是我可以用来描述行为的全部。

4

1 回答 1

1

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

您可能已经看到奇怪的斜线/无斜线问题,因为这些页面仍在缓存中(我不能 100% 确定装饰器是否与从缓存部分中获取交互)。

如果您刷新缓存,甚至取出中间件进行测试,然后再试一次,我敢打赌您会看到预期的一致递增。

于 2012-12-06T22:51:16.697 回答