Redisの設定

Redisの設定は柔軟で強力です。このレッスンでは、設定ファイルと一般的なオプションについて解説します。

設定ファイルの場所

インストール方法によって設定ファイルの場所は異なります:

インストール方法 設定ファイルの場所
apt(Ubuntu) /etc/redis/redis.conf
yum(CentOS) /etc/redis.conf
ソース ソースディレクトリ redis.conf、手動でコピーする必要があります
Homebrew(Mac) /usr/local/etc/redis.conf
Windows インストールディレクトリ redis.windows.conf

ソースインストール後の設定ファイル作成

BASH
# 設定ディレクトリを作成
sudo mkdir -p /etc/redis

# 設定ファイルをコピー
sudo cp /tmp/redis-7.0.11/redis.conf /etc/redis/redis.conf

# データディレクトリを作成
sudo mkdir -p /var/lib/redis
sudo chown redis:redis /var/lib/redis

設定ファイルの形式

Redisの設定ファイルはシンプルなキーと値の形式を使用します:

CONF
# これはコメントです

# 基本形式
config-key value

# 例
port 6379
bind 127.0.0.1
daemonize yes
💡 補足: 設定キーと値はスペースで区切られます。等号は必要ありません。

コア設定オプション

ネットワーク設定

CONF
# バインドIPアドレス
# 127.0.0.1 — ローカルアクセスのみ
# 0.0.0.0 — すべてのIPを許可(危険!)
# 192.168.1.100 — 特定のIPにバインド
bind 127.0.0.1

# リッスンポート
port 6379

# プロテクションモード(オンを推奨)
# yes:バインドまたはパスワードが設定されていない限り、ローカル接続のみ許可
# no:リモート接続を許可
protected-mode yes

# TCP接続バックログサイズ
tcp-backlog 511

# クライアントアイドルタイムアウト(秒、0は切断しないことを意味)
timeout 0

# TCPキープアライブ間隔(秒)
tcp-keepalive 300
⚠️ 注意:セキュリティ上の警告 bind 0.0.0.0 はすべてのIPからのアクセスを許可します。パスワードを必ず設定してください!

一般設定

CONF
# デーモン(バックグラウンド)として実行
daemonize no

# PIDファイルの場所
pidfile /var/run/redis/redis-server.pid

# ログレベル
# debug:多くのデバッグ情報
# verbose:多くの有用な情報
# notice:適度な詳細(本番環境に推奨)
# warning:重要なメッセージのみ
loglevel notice

# ログファイルの場所
# 空文字列は標準出力を意味します
logfile /var/log/redis/redis-server.log

# データベースの数(デフォルト16、0〜15の番号)
databases 16

メモリ管理

CONF
# 最大メモリ使用量
# 形式:1kb、5mb、2gbなど
# 0は無制限を意味します(危険!)
maxmemory 256mb

# メモリ制限に達したときの削除ポリシー
# volatile-lru:TTLが設定されたキーを削除(LRUアルゴリズム)
# allkeys-lru:任意のキーを削除(LRUアルゴリズム)
# volatile-lfu:TTLが設定されたキーを削除(LFUアルゴリズム)
# allkeys-lfu:任意のキーを削除(LFUアルゴリズム)
# volatile-random:TTLが設定されたキーをランダムに削除
# allkeys-random:任意のキーをランダムに削除
# volatile-ttl:最も短いTTLのキーを削除
# noeviction:削除しない、エラーを返す(デフォルト)
maxmemory-policy allkeys-lru

# LRU/LFUサンプルサイズ
# 値が大きいほど正確ですが、CPUをより多く使用します
maxmemory-samples 5
💡 削除ポリシーの選び方:

  • キャッシュシナリオ:allkeys-lru または allkeys-lfu
  • 永続化シナリオ:noeviction または volatile-lru

永続化設定(RDB)

CONF
# RDBスナップショットのトリガー条件
# save <秒数> <変更数>
# 900秒以内に少なくとも1つの変更 → スナップショットをトリガー
save 900 1
save 300 10
save 60 10000

# RDBを無効にする(saveをコメントアウトするか、空に設定)
# save ""

# RDBファイル名
dbfilename dump.rdb

# RDBファイルの保存ディレクトリ
dir /var/lib/redis

# RDB圧縮(オンを推奨)
rdbcompression yes

# RDBチェックサム(オンを推奨)
rdbchecksum yes

永続化設定(AOF)

CONF
# AOFを有効化
appendonly no

# AOFファイル名
appendfilename "appendonly.aof"

# AOF同期戦略
# always:書き込みごとに同期(最も安全、最も低速)
# everysec:1秒ごとに同期(推奨)
# no:OSに任せる(最速、最も安全でない)
appendfsync everysec

# AOF書き換え中にfsyncを無効化
no-appendfsync-on-rewrite no

# AOFファイルサイズが書き換えをトリガー
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
💡 RDB vs AOF:

  • RDB:スナップショット、ファイルが小さい、復旧が高速、ただしデータ損失の可能性あり
  • AOF:ログ、データ安全性が高い、ただしファイルが大きく、復旧が低速
  • 推奨:RDBとAOFの両方を有効にする

セキュリティ設定

CONF
# パスワードを設定(Redis 6.0より前)
requirepass yourpassword

# 危険なコマンドの名前を変更
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command DEBUG ""
⚠️ 補足: Redis 6.0以降では、より柔軟で安全なアクセス制御のためにACLの使用を推奨します。

制限設定

CONF
# 最大クライアント接続数
# 10000は最大10000クライアントを意味します
maxclients 10000

# 最大入力バッファ
client-query-buffer-limit 1gb

# 最大出力バッファ
# normal:通常のクライアント
# replica:レプリカノード
# pubsub:Pub/Subクライアント
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

CONFIGコマンドの使用

実行時に設定を表示および変更できます。

設定の表示

REDIS
# すべての設定を表示
 CONFIG GET *
# 設定キーと値の交互リストを返します

# 特定の設定を表示
 CONFIG GET port
1) "port"
2) "6379"

 CONFIG GET maxmemory
1) "maxmemory"
2) "0"

# 複数の設定を表示(ワイルドカードを使用)
 CONFIG GET maxmemory*
1) "maxmemory"
2) "0"
3) "maxmemory-policy"
4) "noeviction"
5) "maxmemory-samples"
6) "5"

設定の変更

REDIS
# 最大メモリを設定
 CONFIG SET maxmemory 256mb
OK

# ログレベルを設定
 CONFIG SET loglevel "debug"
OK

# データベース数を設定
 CONFIG SET databases 32
OK
⚠️ 補足: CONFIG SETで行った変更はすぐに有効になりますが、再起動すると失われます。設定ファイルに保存するにはCONFIG REWRITEを使用してください。

設定をファイルに保存

REDIS
# 現在の設定を設定ファイルに書き込む
 CONFIG REWRITE
OK

CONFIG REWRITEは次のことを行います:

  1. 元の設定ファイルを読み取る
  2. 現在の実行時設定で上書きする
  3. コメントと書式を保持する

設定のリセット

REDIS
# 統計情報をリセット
 CONFIG RESETSTAT
OK

よくある設定シナリオ

シナリオ1:開発環境

CONF
bind 127.0.0.1
port 6379
daemonize no
logfile ""
databases 16
save ""
appendonly no

シナリオ2:本番環境

CONF
bind 127.0.0.1
port 6379
daemonize yes
logfile /var/log/redis/redis.log
databases 16

# メモリ管理
maxmemory 2gb
maxmemory-policy allkeys-lru

# 永続化
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec

# セキュリティ
requirepass your_strong_password
rename-command FLUSHALL ""
rename-command FLUSHDB ""

シナリオ3:キャッシュサーバー設定

CONF
bind 127.0.0.1
port 6379
daemonize yes
maxmemory 4gb
maxmemory-policy allkeys-lru

# キャッシュには永続化は不要
save ""
appendonly no

シナリオ4:メッセージキュー設定

CONF
bind 127.0.0.1
port 6379
daemonize yes
maxmemory 1gb
maxmemory-policy noeviction

# メッセージキューには永続化が必要
appendonly yes
appendfsync everysec

コマンドライン引数の使用

Redisの起動時に設定値を上書きできます:

BASH
# 単一の設定を上書き
redis-server --port 6380
redis-server --maxmemory 512mb
redis-server --requirepass mypassword

# 複数の設定を上書き
redis-server --port 6380 --maxmemory 512mb --daemonize yes

# 設定ファイル + 一部の設定を上書き
redis-server /etc/redis/redis.conf --port 6380

動的な設定調整

メモリ制限の調整

REDIS
# 現在のメモリ使用量を確認
 INFO memory
used_memory:1048576
used_memory_human:1.00M

# 最大メモリを調整
 CONFIG SET maxmemory 512mb
OK

# 設定を保存
 CONFIG REWRITE
OK

ログレベルの調整

REDIS
# 一時的にデバッグログを有効化
 CONFIG SET loglevel debug
OK

# デバッグ後に戻す
 CONFIG SET loglevel notice
OK

スロークエリログの調整

REDIS
# スロークエリのしきい値を設定(マイクロ秒)
 CONFIG SET slowlog-log-slower-than 10000
OK

# スロークエリログの最大エントリ数を設定
 CONFIG SET slowlog-max-len 128
OK

# スロークエリログを表示
 SLOWLOG GET 10

設定の確認

設定ファイルの構文チェック

BASH
# 起動時にチェック
redis-server /etc/redis/redis.conf --test-memory 100

実行中の設定を表示

BASH
# コマンドラインから表示
redis-cli CONFIG GET maxmemory

# すべての設定を表示
redis-cli CONFIG GET *

❓ よくある質問

Q 設定を変更した後にRedisを再起動する必要がありますか?
A CONFIG SETによる設定変更は再起動なしで即座に有効になります。ただし、再起動すると失われるため、CONFIG REWRITEで永続化してください。
Q Redisのデフォルト設定を表示するにはどうすればよいですか?
A Redisソース配布物の redis.conf ファイルに、詳細なデフォルト設定と説明が含まれています。
Q maxmemoryを0に設定するとどうなりますか?
A 0は無制限のメモリを意味します。Redisは利用可能なメモリをすべて使用するため、OOMが発生してシステムがプロセスを強制終了する可能性があります。
Q 危険なコマンドを無効にするにはどうすればよいですか?
A 設定ファイルで rename-command FLUSHALL "" を使用して、コマンドを空の文字列に名前変更します。
Q 設定ファイルから他の設定ファイルをインクルードできますか?
A はい、include /path/to/other.conf を使用します。

📖 まとめ

📝 練習問題

  1. 設定の表示: CONFIG GETを使用してRedisの設定を確認し、maxmemoryとmaxmemory-policyの値を調べましょう
  2. 設定の変更: CONFIG SETでmaxmemoryを128mbに変更し、CONFIG REWRITEで保存しましょう
  3. シナリオ設定: キャッシュシナリオ用のRedis設定ファイルを書いてみましょう
  4. コマンドの無効化: 設定ファイルでFLUSHALLとFLUSHDBコマンドを無効にしましょう

次のレッスン

次のレッスンでは、Redisのデータ型概要について学びます。Redisの5つの基本データ型を解説します。

100%