从memcached开始。应该/可以添加到缓存中的内容是什么?

时间:2013-10-17 19:06:37

标签: django memcached

我想开始使用memcached,但我不知道如何开始。应该/可以添加到缓存中的内容是什么? (例如在简单的博客应用程序中)。什么是最佳实践?

1 个答案:

答案 0 :(得分:0)

可以在django cache docs中找到基础知识。

如果你有一个非常基本的博客,所有页面都有点相同,你可以使用缓存中间件,它只是缓存一切。

MIDDLEWARE_CLASSES = (
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
)

这将缓存整个网站。然而,如果在某处有动态元素,这有时会有点太多缓存。

如果您的默认视图对所有用户都相同,则只需缓存整个视图。

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)
def my_view(request):
    ...

这将在该视图的缓存中创建一个条目15分钟,具体取决于用户会话/语言。

但有时候这种情况过于宽泛,例如因为页面更新速度明显加快,或页面上存在高度动态的元素。

如果是这种情况,你必须更低一些,并手动维护你的缓存。

你基本上有两个选项,模板片段缓存或使用低级api的对象缓存。

例如,您可以缓存博客条目的模板片段。

{% load cache %}
{% cache 1600 blog_entry blog.id %}
    .. blog_entry ..
{% endcache %}

但是,性能在很大程度上取决于与博客条目链接的数据量。

或者您可以缓存模型的特定条目。

from django.core.cache import cache

def blog_entry(request, id):
    entry = cache.get('blog_entry'+str(id))
    if not entry:
        blog = Blog.objects.get(pk=id)
        cache.set('blog_entry'+str(id), blog.entry, 15*60)
        entry = blog.entry
    ... Render page with entry ...

我的django缓存知识有点生疏,所以可能会有一些错误。其中大部分内容来自他们的文档数据。希望这有点澄清。