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 (ここをsettingsttings.pyのhost名と同じにしないと接続できない5.7 environment: MYSQL_DATABASE: データベース名3306:3306 command: mysqld --character-set-server=utf8mb4 --explicit_defaults_for_timestamp=true redis: (←ここから追加から追加6379:6379 tty: true
Code language: PHP (php)

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' } } }
Code language: JavaScript (javascript)

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
Code language: PHP (php)

さて、 `time`というキーに今の日時をセットしてみました。ちゃんと入っているか、取り出して確認してみましょう。

ゲット

redis.get('time') b'2019-09-21 01:53:27'
Code language: JavaScript (javascript)

ちゃんとセットされている事が確認できました。

以上、djangoでのredisの使い方でした。

最後までお読みいただきありがとうございました。

By user