memcached の使用を開始したいのですが、開始方法がわかりません。キャッシュに何を追加する必要がありますか? (単純なブログ アプリケーションなど)。ベストプラクティスは何ですか?
1 に答える
基本は django cache docsにあります。
すべてのページが多少同じである非常に基本的なブログがある場合は、すべてをキャッシュするだけのキャッシュミドルウェアを使用できます。
MIDDLEWARE_CLASSES = (
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
)
これにより、Web サイト全体がキャッシュされます。ただし、動的要素がどこかにある場合、これはキャッシングが多すぎる場合があります。
すべてのユーザーに同じデフォルト ビューがある場合は、ビュー全体をキャッシュできます。
from django.views.decorators.cache import cache_page
@cache_page(60 * 15)
def my_view(request):
...
これにより、ユーザー セッション/言語に応じて、そのビューのキャッシュに 15 分間のエントリが作成されます。
ただし、ページが非常に高速に更新されたり、ページに非常に動的な要素がある場合など、これは広すぎる場合があります。
その場合は、もう少し低レベルに進み、手動でキャッシュを維持する必要があります。
基本的に、テンプレート フラグメント キャッシングまたは低レベル API を使用したオブジェクト キャッシングの 2 つのオプションがあります。
たとえば、ブログ エントリのテンプレート フラグメントをキャッシュできます。
{% 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 ...
私のジャンゴキャッシュの知識は少しさびているので、間違いがあるかもしれません。これのほとんどは、ドキュメントのデータを使用して作成されました。うまくいけば、これである程度明確になります。