【実務・中級編】 redis.confの設定 – Redis

Redisの魂を制御せよ:実戦で生き残るための redis.conf チューニング論

「Redisは速い」。それは周知の事実だ。だが、多くのエンジニアはデフォルト設定のまま運用し、ある日突然のレイテンシスパイクやOOM(Out of Memory)キラーの餌食となって路頭に迷う。

いいか、`redis.conf` は単なる設定ファイルではない。それは、君が運用するシステムの「生存戦略」そのものだ。今日は、教科書的なマニュアルには載っていない、現場で火を噴かないための「極限のチューニング」について語ろう。

—

1. メモリの限界を突破する:maxmemory と eviction policy

Redisを運用する上で最大の敵は「メモリ枯渇」だ。`maxmemory` を設定していないRedisは、OSのメモリを食い尽くし、最終的にカーネルのOOM Killerに殺される。

物理メモリの70-80%を目安に設定する。残りはOSのバッファ用だ。
maxmemory 8gb

デフォルトの ‘noeviction’ は、メモリが一杯になると書き込みを拒否する。
キャッシュとして使うなら、迷わず ‘allkeys-lru’ を選べ。
maxmemory-policy allkeys-lru

設計者の視点:
`allkeys-lru` は最も汎用的だが、もし「絶対に消えてはいけないセッションデータ」と「消えてもいいキャッシュ」を同じインスタンスに入れているなら、それは設計の敗北だ。目的別にインスタンスを分けろ。 混ぜるな危険だ。

—

2. 永続化のジレンマ:RDB vs AOF

Redisの永続化設定は「速度」と「データの安全性」のトレードオフだ。

  • RDB (Snapshot): 一定間隔でメモリを丸ごと書き出す。バックグラウンドでの `fork()` が発生する。
  • AOF (Append Only File): 書き込み操作をログとして追記する。

現場の最適解:
高負荷な環境で `save 60 10000` のような短い間隔のRDB設定をすると、`fork()` によるコピーオンライトでメモリ消費が跳ね上がり、CPU負荷が爆増する。

AOFを有効にする場合、fsyncのタイミングが肝だ。
everysec (毎秒) がベストプラクティス。
appendfsync everysec

RDBはあくまでバックアップ用と割り切り、間隔を広げるのが通のやり方だ。
save 3600 1 300 100 60 10000

極限の知見:
`fork()` の負荷を避けるなら、Redisのバージョンを上げ、`rdb-save-incremental-fsync` を活用しろ。また、物理メモリが巨大な場合、`Transparent Huge Pages (THP)` が `fork()` の時間を数ミリ秒から数秒に引き延ばす。OS側の `THP` は必ず無効化しておくこと。これは常識だ。

—

3. ネットワークとレイテンシの罠

Redisはシングルスレッドモデルだ。ネットワーク層での詰まりは、すべてのリクエストを止めさせる。

TCPバックログ。高負荷環境ではデフォルトの511では足りない。
tcp-backlog 65535

不要な接続によるメモリリークを防ぐ。
timeout 300

設計者の視点:
Redisのコマンドは速い。だが、1つの巨大な `KEYS ` コマンドで全リクエストが止まることは忘れるな。コマンドの実行時間を監視し、重いコマンドは即座にログへ吐き出させる設定を入れておけ。

10ms以上かかったコマンドを記録する。
slowlog-log-slower-than 10000

—

4. セキュリティと可用性のための防壁

最後に、インターネット上にRedisを晒すのは自殺行為だ。

1. bind設定: `bind 127.0.0.1` または専用のプライベートIPのみを許可せよ。
2. protected-mode: `yes` がデフォルトだが、本番環境では必ず確認すること。
3. requirepass: 強固なパスワードを設定する。Redisの認証は非常に高速なので、複雑なパスワードでもオーバーヘッドは誤差の範囲だ。

—

最後に:設定ファイルは「生き物」だ

`redis.conf` は一度決めて終わりではない。システムが成長し、データ量やトラフィックの性質が変われば、最適な設定も変わる。

「設定値の根拠を説明できるか?」

これが、一流のエンジニアとそうでないエンジニアの分かれ目だ。「なんとなく良さそう」ではなく、メトリクスを計測し、ボトルネックを特定し、その上でチューニングを施す。そのプロセスこそが、君のシステムを堅牢にする唯一の道だ。

さあ、今すぐ君の `redis.conf` を確認しろ。君のRedisは、まだ本来の性能を出せていないはずだ。

コメント

タイトルとURLをコピーしました