やあ、エンジニアの世界へようこそ。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使いへの第一歩を踏み出したと言える。
何か壁にぶつかったら、いつでも聞きに来てくれ。君のコードが軽やかに動く日を楽しみにしているよ!
コメント