こんにちは。Redisの世界へようこそ。
Redisをただの「速いキャッシュ」だと思っていませんか? もしそうなら、今日でその認識をアップデートしましょう。Redisの本質は、「限られたメモリというステージで、どの情報を主役に据え続けるか」を見極める、極めて賢いマネジメントシステムにあります。
今回は、Redisの心臓部とも言える「メモリ管理とエビクション(追い出し)ポリシー」について、専門用語を極力使わずに紐解いていきます。ここを理解すれば、あなたのサービスが急なアクセス増でパンクすることもなくなりますよ。
—
1. なぜRedisは「記憶喪失」になる必要があるのか?
Redisはメモリ上で動きます。メモリは高速ですが、容量には限りがありますよね。例えば、あなたの部屋(メモリ)が本でいっぱいになったとき、新しい本を置くためには、古い本を捨てなければなりません。
Redisも同じです。`maxmemory`という設定値は、いわば「あなたの部屋の広さ」です。この制限に達したとき、Redisは「どのデータを捨てて、新しいデータのためのスペースを作るか」を考え始めます。これが「エビクション(追い出し)」です。
2. 「追い出し」のルールを決めよう
Redisには、何を捨てるかの「哲学」がいくつか用意されています。大きく分けて2つの指標で考えてみてください。
- LRU (Least Recently Used): 「最近使っていないもの」を捨てる。
- LFU (Least Frequently Used): 「あまり使われないもの」を捨てる。
わかりやすい例え:カフェのテーブル
- LRUの場合: 「さっきまで読んでいた雑誌はまだ必要かな? でも、1時間前に読んだきりの新聞は捨てよう」という判断です。「時の流れ」を重視します。
- LFUの場合: 「このメニュー表はみんなが毎日見るから大事。でも、隅っこに置かれた古いチラシは誰も見ていないから捨てよう」という判断です。「人気度」を重視します。
—
3. 具体的なポリシーの選び方
Redisの設定ファイル(redis.conf)では、主に以下のポリシーが選べます。
| ポリシー名 | どんな判断をする? |
| :— | :— |
| allkeys-lru | 全データから「最近使ってないもの」を捨てる。迷ったらこれ。 |
| allkeys-lfu | 全データから「人気のないもの」を捨てる。アクセス傾向が安定している時に。 |
| volatile-lru | 「有効期限(TTL)がついたデータ」の中だけで、最近使ってないものを捨てる。 |
「どれを選べばいいの?」と悩んだら、まずは `allkeys-lru` でスタートしてください。これは「古いものを捨てる」という、人間にとっても最も直感的でミスが少ない戦略だからです。
—
4. 実践:設定を確認してみよう
Redisの設定を確認するには、CLIから以下のコマンドを打ちます。
現在のメモリ制限設定を確認する
127.0.0.1:6379> CONFIG GET maxmemory
1) “maxmemory”
2) “1073741824” # 1GBに設定されている例
現在の追い出しポリシーを確認する
127.0.0.1:6379> CONFIG GET maxmemory-policy
1) “maxmemory-policy”
2) “allkeys-lru” # 現在の設定値が表示される
もし、特定のデータ(例えばユーザーのセッション情報など)を絶対に消したくない場合は、そのデータには有効期限をつけないようにし、ポリシーを `volatile-lru` に設定することで、「期限付きキャッシュ」だけを安全に掃除させることができます。
—
5. アーキテクトからのアドバイス
最後に、プロの現場で大切にしている視点を一つだけお伝えします。
「エビクションを発生させない設計が最強」です。
メモリを追い出しポリシー任せにするのではなく、あらかじめ「このキャッシュは1時間で消す」「このデータはDBにもあるから消えてもいい」という設計をアプリケーション側で行うこと。これができると、Redisは「追い出し作業」という無駄な計算をせず、本来の目的である「爆速のデータ提供」に全てのパワーを注げるようになります。
—
まとめ
- maxmemory: あなたのメモリの限界値。
- LRU/LFU: 「最近使っていない」か「頻繁に使われていないか」の判断基準。
- 設計が先、設定は後: 可能ならTTL(有効期限)を適切に設定し、エビクションに頼りすぎない構成を目指す。
ここをクリアすれば、あなたはもうRedisのメモリ管理という深い森の入り口に立っています。あとは、実際に自分の環境で少しずつ調整しながら、Redisが生き生きと動く感覚を掴んでみてください。
何か詰まったら、いつでも聞きに来てくださいね。応援しています!
コメント