djangoでceleryを使って非同期処理を組み込みたいのですが、その前に、celeryはredisを必要とするということでまずはdjango + redisの環境を整えたいと思います。
docker-compose
以前docker-composeで作った環境にredisを追加したいと思います。
version: '3.7'
services:
django:
restart: always
build: .
volumes:
- ./:/projects
command: /bin/sh -c "cd /projects; python manage.py migrate; python manage.py runserver 0:8000"
ports:
- 8000:8000
depends_on:
- db (ここをsettings.pyのhost名と同じにしないと接続できない)
- redis (←追加)
db: (ここをsettings.pyのhost名と同じにしないと接続できない)
image: mysql:5.7
environment:
MYSQL_DATABASE: データベース名
MYSQL_USER: root
MYSQL_ROOT_PASSWORD: パスワード
tty: true
ports:
- 3306:3306
command: mysqld --character-set-server=utf8mb4 --explicit_defaults_for_timestamp=true
redis: (←ここから追加)
image: redis:latest
ports:
- 6379:6379
tty: true
redisのイメージを使い、djangoのコンテナと連携させます。
requirements.txt
requirements.txtに
django-redis
を追加します。
django-redis
django-redisとはその名の通り、djangoでredisを使うためのモジュールです。
ドキュメント
http://niwinz.github.io/django-redis/latest/
settings.py
django-redisでキャッシュを使いますという設定を追加します。
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://redis:6379/',
'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient'
}
}
}
LOCATION
のポート番号の前の redis
に注目してください。ここは先ほど docker-composeで書いた `redis`コンテナの名前をリンクしていますので注意が必要です。
使い方
実際の使い方をご紹介しましょう。
ここでは簡単ではありますが、今の日時を保存してみたいと思います。
セット
# python manage.py shell
Python 3.7.4 (default, Jul 13 2019, 14:35:55)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
# 日時を取得
import datetime
now = datetime.datetime.now()
print(now.strftime('%Y-%m-%d %H:%M:%S'))
'2019-09-21 01:53:27'
# ここからdjango-redisが出てくる
from django_redis import get_redis_connection
redis = get_redis_connection("default")
result = redis.set("time", now.strftime('%Y-%m-%d %H:%M:%S'))
print(result)
True
さて、 `time`というキーに今の日時をセットしてみました。ちゃんと入っているか、取り出して確認してみましょう。
ゲット
redis.get('time')
b'2019-09-21 01:53:27'
ちゃんとセットされている事が確認できました。
以上、djangoでのredisの使い方でした。
最後までお読みいただきありがとうございました。