DjangoのCacheBackendとしてRedisを利用する


VPSで運用しているMezzanineのCacheBackendとして、Redisを使ってみました。
実施した内容をまとめておきます。
前提
以下の環境にRedisをインストールして利用しました。
- OSのバージョン
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04.1 LTS
Release: 24.04
Codename: noble
- MezzanineとDjangoのバージョン
pip list | grep Mezzanine
Mezzanine 6.0.0
pip list | grep Django
Django 4.2.19
Redisの認証方式について
RedisはID/Passwordによる認証ができそうですが、認証方式は以下の2種類があることがわかりました。
- Redis v5.0までのパスワードのみの認証
- Redis v6.0以降で使えるACLによる、ID/Passwordの認証
ACLは説明を見ると面倒くさそうだったので、今回はパスワード認証を行うようにします。
ACL認証の説明は以下の記事が参考になりました。
RedisをUbuntu 24.04 にインストール
以下のページを参考に、Ubuntu24にRedisをインストールします。
Install Redis
- アップデートが可能なパッケージのリストを更新する
sudo apt update
- Redisのインストール
sudo apt install redis-server
- Redisのバージョン確認
redis-server --version
Redis server v=7.0.15 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=d81b8ff71cfb150e
Redisの認証設定
パスワードのみの認証を設定します。
パスワードのみの認証の場合は、ユーザーIDはdefault
になります。
- 設定ファイルを編集
sudo vi /etc/redis/redis.conf
- requirepassディレクティブの設定
以下のコメントの記載行あたりに移動して、requirepass
ディレクティブの設定をします。
# IMPORTANT NOTE: starting with Redis 6 "requirepass" is just a compatibility
# layer on top of the new ACL system. The option effect will be just setting
# the password for the default user. Clients will still authenticate using
# AUTH <password> as usually, or more explicitly with AUTH default <password>
# if they follow the new protocol: both will work.
パスワードを私はCrypto: randomUUID() メソッド - Web API | MDNで生成して以下のような形で設定しました。
requirepass ce56c758-2b29-4b0c-9301-7d5be9140242
Django の設定
以下を参考にDjnagoの設定を行います。
-
redis-pyのインストール
settings.pyへの設定だけだと、以下のエラーが発生するため、redis-py
をインストールします。
No module named 'redis'
インストールコマンドは以下になります。
sudo pip install redis
- settings.pyへ設定の追加
CACHE_MIDDLEWARE_KEY_PREFIX = PROJECT_APP
CACHES = {
"default": {
"BACKEND": "django.core.cache.backends.redis.RedisCache",
"LOCATION": "redis://default:ce56c758-2b29-4b0c-9301-7d5be9140242@127.0.0.1:6379",
"TIMEOUT": 60 * 60 * 48,
}
}
元々あるCACHE_MIDDLEWARE_KEY_PREFIX = PROJECT_APP
の記載の下部に、CACHES
の設定を追加します。
-
settings.pyの設定値の説明
TIMEOUT値は、48時間で設定しています。
default
はRedisのユーザー名、ce56c758-2b29-4b0c-9301-7d5be9140242
はRedisのパスワードの指定になります。 -
CacheBackendのオプションの指定方法
CacheBackendにより、オプションの指定の方法は異なります。
以下のドキュメントに、Redisで指定可能なオプションが記載されています。- Advanced Configuration — django-redis-cache 1.5.2 documentation Connection Pool数はチューニングの余地がありそうにも思いました。
Redisのキー情報の確認と、キャッシュの削除
記事の更新で、キャッシュを削除したり、登録されているKeyの確認をするので、その際に実施したコマンドになります。
- 登録されているキーの確認
# redisにログイン
redis-cli
# 認証を通す
AUTH [username] password
KEYS *
KEYS *
で登録済みのキー値が確認できます。
- キャッシュの全削除
# redisにログイン
redis-cli
# 認証を通す
AUTH [username] password
FLUSHALL
FLUSHALL
で登録済みのキャッシュを全削除できます。
実施した作業は以上になります。