1

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

4

1 回答 1

0

基础知识可以在 django缓存文档中找到。

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

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 缓存知识有点生疏,所以可能会有一些错误。其中大部分是使用他们文档中的数据完成的。希望这可以稍微澄清一下。

于 2013-10-17T19:41:32.857 回答