该@cache_page decorator真棒.但对于我的博客,我想在缓存中保留一个页面,直到有人对帖子发表评论.这听起来像个好主意,因为人们很少发表评论,因此将页面保留在memcached中,而没有人评论会很好.我以为某人之前一定有过这个问题?这与每个网址的缓存不同.
所以我想到的解决方案是:
@cache_page( 60 * 15, "blog" );
def blog( request ) ...
Run Code Online (Sandbox Code Playgroud)
然后我会保留用于博客视图的所有缓存密钥的列表,然后让"博客"缓存空间到期.但是我对Django没有超级经验,所以我想知道是否有人知道更好的方法吗?
当我跑python manage.py shell,然后:
from django.core.cache import cache
cache.set("stack","overflow",3000)
print cache.get("stack")
(output: ) None
Run Code Online (Sandbox Code Playgroud)
我尝试重启memcache,这就是我的设置:
CACHES = {
'default' : {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION' : '127.0.0.1:11211',
}
}
Run Code Online (Sandbox Code Playgroud) 我的目标是缓存视图,直到发生视图缓存需要过期的事件为止,否则缓存 1 小时。这就是我在 urls.py 中的内容
url(r'^get_some_stuff/$', cache_page(60 * 60, key_prefix='get_some_stuff')(views.StuffView.as_view())),
Run Code Online (Sandbox Code Playgroud)
这很好用。现在我尝试获取缓存的视图以验证其中是否有内容,我尝试了以下操作:
from django.core.cache import cache
cache.get('get_some_stuff')
Run Code Online (Sandbox Code Playgroud)
但这返回 None。我希望做这样的事情:
from django.core.cache import cache
#relevant event happened
cache.delete('get_some_stuff')
Run Code Online (Sandbox Code Playgroud)
处理缓存的正确方法是什么?
我尝试过传递 uri 路径:
cache.get('/api/get_some_stuff/')
Run Code Online (Sandbox Code Playgroud)
我仍然没有得到回报。
>>> cache.has_key('/api/get_some_stuff/')
False
>>> cache.has_key('/api/get_some_stuff')
False
>>> cache.has_key('get_some_stuff')
False
Run Code Online (Sandbox Code Playgroud)
我已经查看了建议的答案,它根本没有解决根本问题。它看起来并不像传递 uri 路由路径作为密钥那么简单,因为密钥在 django 中有些抽象。