docker-compose で redis のコンテナを作成して django-redis を使ってみる

参考

準備

redis をコンテナで用意する為に docker-compose に下記の通り追記します。

version: '3'
services:
  web:
    ...(略)
  db:
    ...(略)
  redis:
    image: "redis:latest"
    ports:
      - "6379:6379"
    volumes:
      - "./data/redis:/data"

volume を指定しているのは下記の理由との事。

後で気づいたんだけど、この「Volumes」の項目が、
『データの永続化』をする際にどこに保存しておくかの設定のようだ。
この項目が存在しない場合、 docker-compose down -> docker-compose up すると、
Redisのデータが消えます。Redisのデータは通常はキャッシュとして扱うようなので、
消えても良いのが理想らしいのだけど、意図するかどうかは意識した方が良さそう。

requirements.txt に django-redis を追記します。

django-redis

settings.py に下記を追記します。

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://redis:6379/', # localhost にインストールしてる場合は //localhost:6379
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient'
        }
    }
}

キャッシュの範囲の指定

こちらのサイト「キャッシュを使う」によると下記の通りのキャッシュを指定できるそうです。

  • サイト単位のキャッシュ
  • ビュー単位のキャッシュ
  • テンプレートの部品単位のキャッシュ
  • 低水準のキャッシュAPI

今回は低水準のキャッシュAPIを試してみました。

コード

下記の通りのコードです。

from django.core.cache import cache

def set(request):
    key = "dog"
    value = "bow"
    timeout_seconds = 10
    cache.set(key, value, timeout_seconds)
    return HttpResponse("set cache")

def get(request):
    key = "dog"
    value = cache.get(key)
    return  HttpResponse(value)

timeout_seconds がキャッシュの保持秒数となっているようです。
set を実行した後に get を実行すると bow が帰ってきますが 10 秒立った後に get を実行したらしっかりと None が返ってきました。

ざっくりとですがとりあえずここまでで。。。