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

Cover Image for DjangoのCacheBackendとしてRedisを利用する
monotalk
monotalk

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の設定を行います。

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で指定可能なオプションが記載されています。

Redisのキー情報の確認と、キャッシュの削除

記事の更新で、キャッシュを削除したり、登録されているKeyの確認をするので、その際に実施したコマンドになります。

  • 登録されているキーの確認
# redisにログイン
redis-cli
# 認証を通す
AUTH [username] password
KEYS *

KEYS *で登録済みのキー値が確認できます。

  • キャッシュの全削除
# redisにログイン
redis-cli
# 認証を通す
AUTH [username] password
FLUSHALL

FLUSHALLで登録済みのキャッシュを全削除できます。

実施した作業は以上になります。