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は次のことを行います:
- 元の設定ファイルを読み取る
- 現在の実行時設定で上書きする
- コメントと書式を保持する
設定のリセット
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 を使用します。📖 まとめ
- 設定ファイルの場所はインストール方法によって異なります。ソースインストールでは手動でコピーする必要があります
- コア設定領域:ネットワーク、メモリ、永続化、セキュリティ
- CONFIG GET/SETで実行時設定を表示および変更します
- CONFIG REWRITEで設定をファイルに保存します
- 異なるシナリオには異なる設定戦略が必要です
- 本番環境では常にパスワードとメモリ制限を設定します
📝 練習問題
- 設定の表示: CONFIG GETを使用してRedisの設定を確認し、maxmemoryとmaxmemory-policyの値を調べましょう
- 設定の変更: CONFIG SETでmaxmemoryを128mbに変更し、CONFIG REWRITEで保存しましょう
- シナリオ設定: キャッシュシナリオ用のRedis設定ファイルを書いてみましょう
- コマンドの無効化: 設定ファイルでFLUSHALLとFLUSHDBコマンドを無効にしましょう
次のレッスン
次のレッスンでは、Redisのデータ型概要について学びます。Redisの5つの基本データ型を解説します。



