DjangoのキャッシュバックエンドをRedisにする


はじめに

筆者自身が、NoSQL、cacheの知識が乏しいため、この記事の対象者は以下のような方を想定しています。

  • windowsユーザー
  • NoSQL初学者
  • キャッシュ初学者
  • Djnagoプロジェクトを作成済みで、キャッシュを使いたい方

この記事のメインは、Djangoのキャッシュバックエンドで、Redisを使うことなので、
Redisのインストールは完了している前提です。
Redisのインストールについては、ほぼすっ飛ばします!

Redisのインストール

1.windows向けのRedisのmsiファイルをダウンロードする。

https://github.com/microsoftarchive/redis/releases/tag/win-3.0.504 から
「Redis-x64-3.0.504.msi」をダウンロードして、起動する。

2.インストーラが起動したら、どんどんNext。

インストーラの内容は普通のインストーラと同じです。笑

  • 規約同意
  • インストール先ディレクトリ
      →環境変数にpathを追加のチェックボックスがあるので、チェックを付けておくことのが無難。
  • 何番ポートを使用するか
      →デフォルトは「6379」。ファイアーウォールの規則に追加するかのチェックボックスがあるので、 個別で設定したくない場合は、チェックを入れることを推奨する。

3.一応インストール完了確認。

コマンドプロンプトを立ち上げて、以下のように入力し、Enterを押下する。

 > redis-cli.exe

その後、プロンプトが以下のようになれば、インストール完了。

 127.0.0.1:6379> 

django-redisをインストールする

1.pipでdjango-redisをインストールする。

 > pip install django-redis 

2.djangoプロジェクトのsettings.pyにcacheの設定を追加する。

settings.pyに以下の記述を追加する。

settings.py
  CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://localhost:6379/',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient'
        }
    }
  }

*参考までに、デフォルトのCASHESの設定はこちら

django.conf.global_settings.py
  CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    }
  }

3.今回は、テンプレートの一部をキャッシュする。

現在時刻をキャッシュするのがわかりやすかったので、現在時刻をキャッシュして確認する。
参考:キャッシュを使う

test.html
{% load cache %}
  <h2>こっちはキャッシュせず</h2>
  <span>{{ now }}</span>
{% cache 240 now_cache%}
  <h2>ここはキャッシュする</h2>
  <span>{{ now }}</span>
{% endcache %}

↓表示画面

ちなみに、redis-cliで参照すると、
htmlがエスケープされて文字列として格納されていることが確認できる。

キャッシュできる範囲はview単位や、サイト単位などさまざまなので、
参考サイトの「キャッシュを使う」を参考にしてほしい。

さいごに

 RDBばかり使っていたせいで、Redisの値の格納の仕方に違和感を感じてしまう。
 データベース名は?テーブル名は?となるが、そこがKVS(Key Value Store)の特徴といえよう。
 柔軟な使用が見込めそう。
 
 ○謎の宣言
  ページのキャッシュなどを活用して、レスポンスの早いwebページの作成を心掛けたい。

参考サイト