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 が返ってきました。
ざっくりとですがとりあえずここまでで。。。
ディスカッション
コメント一覧
まだ、コメントがありません