Python
Django
Memcached

DjangoによるMemcached設定

More than 2 years have passed since last update.

環境

  • Mac OS yosemite
  • Python3系
  • Django1.8
  • Memcached14系

手順

今回は、サイト単位のキャッシュ設定とします
他にはページ単位、キー&バリューなどの様々な方法もあります。

  • Memcachedをダウンロードする
    • brew install memcached
  • Djangoのプロジェクトのsetting.pyを編集する
MIDDLEWARE_CLASSES = (

    〜〜〜

    # 順番もこの通りにする
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',

    〜〜〜
)

〜〜〜

CACHE_BACKEND = 'memcached://127.0.0.1:11211/'

middlewareの順番ですが、公式ページに理由が書いてあり目を通したほうがいいでしょう。→https://docs.djangoproject.com/en/1.8/ref/middleware/
要は、サイト全体に対するキャッシュを適用させるためにはリクエスト・レスポンスフェーズにおいて呼ばれるミドルウェアを考慮する必要があるわけです。

https://github.com/django/django/blob/master/django/middleware/common.py
https://github.com/django/django/blob/master/django/middleware/cache.py
このソースを読めば具体的にわかると思います。

UpdateCacheはレスポンスフェイズに、FetchFromCacheはリクエストフェイズに呼ばれますので、レスポンスフェイズは記述の下から動作し、リクエストフェイズは記述の上から動作します。

  • Memcachedの起動
    • memcached
  • サーバの起動
    • python3 manage.py runserver
  • dbやapiなどの時間を要するページに一度アクセスし、再度アクセスする(ログなどを見て、キャッシュから情報を取っているか確認する)