在我的django项目上缓存几个视图 - @ cache_page(60 * 5) - 我注意到memcached缓存了整个视图,甚至请求参数!因此,如果第一个访问某个页面的用户以userxyz身份登录,那么所有其他匿名或注册用户都会询问相同的页面,并且会显示用户userxyz缓存的页面!显然,这不是一个理想的行为...所以我可以缓存一切视图,但不是请求参数?或者memcached只适用于匿名会话?memcached缓存请求?
由于提前, 马科斯Gogoulos
在我的django项目上缓存几个视图 - @ cache_page(60 * 5) - 我注意到memcached缓存了整个视图,甚至请求参数!因此,如果第一个访问某个页面的用户以userxyz身份登录,那么所有其他匿名或注册用户都会询问相同的页面,并且会显示用户userxyz缓存的页面!显然,这不是一个理想的行为...所以我可以缓存一切视图,但不是请求参数?或者memcached只适用于匿名会话?memcached缓存请求?
由于提前, 马科斯Gogoulos
如果你混在一个页面上的动态和静态数据,你的情况的动态数据在登录用户的用户名,然后页面缓存是不是正确的选择。如果您使用基于文件的缓存而不是memcached,则这不会改变。
我建议尝试片段缓存。你可以做这样的事情:
{% load cache %}
{% cache 500 sidebar %}
.. sidebar ..
{% endcache %}
这将缓存500秒与标识栏缓存标签的内容。
你可以在这里找到更多的信息缓存:
http://docs.djangoproject.com/en/dev/topics/cache/
如果这是将是非常经常打,例如一个欢迎页面一个页面,你觉得将受益从使用页面缓存到片段缓存(例如,唯一的动态数据是用户名),还有其他一些选项。
举个例子,你想要有一个完全静态的页面,除了顶部的一个登录/注销部分,根据用户是否登录显示不同的链接,然后你可以检查是否存在身份验证cookie当页面第一次加载并有条件地显示不同的数据使用JavaScript。
Memcached只是一个后端。它缓存你告诉缓存的任何内容。所以真的你的问题是“Django的整页缓存适合动态页面吗?” 也许你不希望缓存整页,只是它的一部分。还是只有网页匿名请求(使用CACHE_MIDDLEWARE_ANONYMOUS_ONLY
)
你可能要考虑template fragments和缓存非用户特定内容的那些位。