【入門編】 メモリ管理とエビクションポリシー – Redis

こんにちは。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が生き生きと動く感覚を掴んでみてください。

何か詰まったら、いつでも聞きに来てくださいね。応援しています!

コメント

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