【入門編】 メモリ削除ポリシー (Eviction Policies) – Redis

やあ、エンジニアの世界へようこそ。Redisという「魔法のような高速ストレージ」に興味を持った君は、すでに優れたセンスを持っているね。

Redisは、その爆速な処理能力の裏側で、非常に賢い「お片付け」をしています。今回は、Redisがメモリという限られたスペースをどうやりくりしているのか、その心臓部である「データ削除のルール(Eviction Policies)」について、専門用語に溺れることなく、本質を伝授しよう。

—

「魔法の机」の話をしよう

君のデスクを想像してほしい。仕事をするためのスペース(メモリ)には限りがあるよね。次から次へと新しい書類(データ)が届くけど、机がいっぱいになったらどうする?

1. 「一番最近使っていない書類」を捨てる
2. 「一番頻繁に使っていない(たまにしか見ない)書類」を捨てる
3. 「賞味期限が切れた書類」を捨てる

Redisがメモリ限界に達したときに行う「Eviction(追い出し)」も、まさにこれと同じことをやっているんだ。

—

1. LRU (Least Recently Used) – 「最近使ってないなら、もういいよね?」

これは非常に直感的なルールだ。最後に触ったのがずっと昔のものは、今後も使われる可能性が低いと判断して捨てる。

  • 考え方: 「直近の流行りは重要」というスタンス。
  • 例: 本棚。あまりに長い間読んでいない本は、新しい本を買うために古本屋へ売るよね。

2. LFU (Least Frequently Used) – 「そもそも全然使ってないよね?」

これは「頻度」を見る。たとえ昨日見たとしても、1ヶ月で1回しか見ないなら、それは優先度が低いと判断する。

  • 考え方: 「歴史的にも愛されているデータは残す」というスタンス。
  • 例: 頻繁に開く辞書は手元に置くけど、年に一度しか読まない専門書は奥にしまう。

3. TTL (Time To Live) – 「賞味期限付きのデータ」

これは「削除ポリシー」というより「データの寿命」だ。最初から「君は1時間経ったら消えるからね」と約束しておく方法。

  • 考え方: 「鮮度が命」のデータに使う。
  • 例: ログインセッションや一時的な認証コードなど。

—

Redis設定の現場から:少しだけ裏側の話

Redisでこれらを設定するのは `maxmemory-policy` という項目だ。実は、Redisは「全データから選ぶ」のか「賞味期限付きのデータから選ぶ」のかを細かく指定できる。

Redisの設定ファイル (redis.conf) のイメージ

メモリがいっぱいになったら、一番使われていないデータを捨てる
maxmemory-policy allkeys-lru

賞味期限が設定されているデータの中から、一番使われていないものを捨てる
maxmemory-policy volatile-lru

初心者の君がまず覚えるべきは `allkeys-lru` だ。「とりあえず、最近使ってないやつから消してスペースを空けてくれ」という、最も汎用的でバランスの良い設定だよ。

—

実践:Redisに「お片付け」を命じる方法

Redisのコマンドは驚くほどシンプルだ。以下のように、データに寿命(TTL)を設定する練習をしてみよう。

‘my_key’ というデータに、60秒間の寿命を与える
SET my_key “Hello Redis!”
EXPIRE my_key 60

60秒後、このデータはRedisが自動で綺麗に消してくれる。
これを使いこなせば、メモリ溢れ(Out of Memory)の心配は激減するよ。

—

先輩からのアドバイス

「どのルールがいいのか?」と迷うかもしれない。でも、最初のうちは難しく考えなくていい。

  • 「とりあえずキャッシュとして使うなら、LRUで十分」
  • 「データが消えると困るもの(DBの代わりなど)は、そもそもRedisのメモリ上限をデータ量より大きく設計する」

この2つさえ守れば、君のRedis運用は非常に安定するはずだ。

メモリ管理はエンジニアの腕の見せ所だ。限られたリソースの中で、いかにパフォーマンスを最大化するか。この「お片付け」の仕組みを理解した君なら、もう立派なRedis使いへの第一歩を踏み出したと言える。

何か壁にぶつかったら、いつでも聞きに来てくれ。君のコードが軽やかに動く日を楽しみにしているよ!

コメント

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