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

やあ。Redisの世界へようこそ。
Redisを「単なる高速なデータベース」だと思っているなら、それは非常にもったいない。Redisは、限られた「メモリ」という聖域をいかに効率よく使いこなすか、その知略を競うパズルゲームのようなものなんだ。

今日は、Redisの心臓部とも言える「メモリが満杯になったとき、誰を追い出すか?」という、最も重要かつ戦略的なテーマについて話そう。

—

「机の上の整理術」で考えるメモリ削除

想像してみてほしい。君のデスク(メモリ)の上には、仕事に必要な資料(データ)が散らばっている。でも、デスクは無限に広いわけじゃない。新しい資料を広げようとしたとき、デスクが満杯だったらどうする?

1. 「もう古いから捨てよう」(LRU:Least Recently Used)
2. 「全然使っていないから捨てよう」(LFU:Least Frequently Used)
3. 「期限切れだから捨てよう」(TTLベースの削除)

Redisもこれと全く同じことをしているんだ。これを「Eviction Policy(逐次削除ポリシー)」と呼ぶ。

—

1. LRU:最近使っていないものは「過去」のもの

LRU(Least Recently Used)は、最もポピュラーな戦略だ。「しばらく触っていない資料は、もう必要ないだろう」という考え方だね。

  • どんな時におすすめ?:直近でよく使うデータほど価値が高い、という典型的なキャッシュ運用。
  • Redisの挙動:最後にアクセスしてから一番時間が経っているデータから順番にシュレッダーにかける。

2. LFU:人気のないものは「去れ」

LFU(Least Frequently Used)は、「最後にいつ使ったか」ではなく「どれだけ頻繁に使ったか」を重視する。

  • どんな時におすすめ?:特定のデータが極端に人気で、たまにしか使われないデータと混在しているとき。LRUだと「さっき一回開いただけ」のデータが残ってしまうが、LFUなら「みんなが何度も見ているデータ」を確実に守れる。

3. TTLベースの削除:賞味期限が切れたら「サヨナラ」

これは他のポリシーとは少し毛色が違う。データに「寿命(TTL: Time To Live)」を設定するんだ。

  • 例:Webサイトのログインセッションや、一時的なクーポンコード。
  • 仕組み:Redisは、期限が過ぎた瞬間に「あ、これもうゴミだ」と判断して掃除してくれる。

—

設定を変えてみよう(設定ファイルの魔法)

Redisの設定ファイル(`redis.conf`)を覗くと、`maxmemory-policy`という項目があるはずだ。ここが君の判断の分かれ道になる。

よく使われる設定例
メモリがいっぱいになったら、最近使われていないものから消す
maxmemory-policy allkeys-lru

メモリがいっぱいになったら、期限が設定されているものの中から古いものを消す
maxmemory-policy volatile-lru

初心者の君へアドバイスだ。「まずは `allkeys-lru` から始めなさい」。これが最も汎用的で、多くのケースで期待通りのパフォーマンスを出してくれる。

—

実務レベルの「知恵」:メモリは「空き」があってこそ

ここで、伝説的なアーキテクトからの忠告を一つ。

「メモリを100%使い切るような運用はしてはいけない」

メモリが限界に達すると、Redisは新しいデータを書き込むたびに「どれを消そうか」という計算(削除処理)を裏で始める。これがCPUを食い、せっかくのRedisの速度を落としてしまうんだ。

  • 理想の運用:メモリの80%くらいを目安に運用し、余裕を持って動かす。
  • 監視:`INFO memory` コマンドを叩いて、常にメモリの推移を眺める習慣をつけよう。

Redisに今のメモリ状態を聞いてみる
127.0.0.1:6379> INFO memory
戻り値の used_memory_human をチェック!
ここが maxmemory の設定値に近づいていないか監視するのがプロの仕事だ。

—

まとめ:Redisを飼いならすということ

Redisは、君が何もしなくても優秀な秘書のように振る舞ってくれる。でも、データの特性に合わせて「誰を優先的に残し、誰を捨てるか」というルール(ポリシー)を正しく設定してあげるだけで、そのパフォーマンスは劇的に変わるんだ。

まずは、自分の扱っているデータが「鮮度が命(LRU向き)」なのか「人気が命(LFU向き)」なのか、じっくり観察することから始めてみてほしい。

ここをクリアすれば、君はもうRedisの基本を完璧にマスターしたと言っていい。次は、もっと深い「メモリの断片化」の話でもしようか?
君のエンジニアリングが、より鋭く、より洗練されたものになることを期待しているよ。

コメント

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