こんにちは! Redisの奥深い世界へようこそ。
今回は、Redisを使いこなす上で避けて通れない、けれど実はすごく面白い「期限切れキーとメモリ淘汰(とうた)ポリシー」についてお話ししますね。
「難しそうだな…」と感じるかもしれませんが、大丈夫。ここをクリアすれば、あなたもRedisのメモリ管理の仕組みをスッキリ理解できるようになりますよ。
それでは、一緒に見ていきましょう!
—
Redisは「無限の引き出し」ではない
Redisは、データをすべてメモリ(RAM)上で高速に処理するデータベースです。ハードディスクやSSDを使う一般的なデータベースと違って、メモリは容量に限りがありますよね。
例えるなら、Redisは「めちゃくちゃ仕事が早いけれど、机の上がすぐに書類でいっぱいになっちゃう優秀なアシスタント」のようなものです。
机の上がパンパンになったとき、アシスタントはどうするべきでしょうか?
- 「期限が切れた不要な書類」を捨てる(期限切れキーの削除)
- 「もう使わなそうな古い書類」を片付けてスペースを空ける(メモリ淘汰)
Redisが限られたメモリを上手にやりくりするために行っているこの2つのアプローチについて、詳しく紐解いていきましょう。
—
1. 期限切れキーはどうやって消える?(タイムキーパーの裏側)
Redisでは、データ(キー)を保存するときに「〇秒後に消してね」という寿命(TTL: Time To Live)を設定できます。
ここで一つの疑問が浮かびます。
「寿命が切れた瞬間、Redisはそのデータを一瞬で消し去っているの?」
実は、答えは「No」です。もし寿命を迎えた瞬間に数百万件のキーをすべてチェックして消そうとしたら、Redisの頭がフリーズしてしまいます(これを「ブロッキング」と呼びます)。仕事が早いアシスタントでも、一瞬で固まってしまいますよね。
そのため、Redisは裏側でとても賢い仕組み(パッシブ削除とアクティブ削除)を使っています。
- パッシブ削除(受動的): ユーザーが「そのデータちょうだい」とアクセスした瞬間、「あ、これ寿命切れてるじゃん!」と気づいてその場で消す方法。
- アクティブ削除(能動的): 定期的にRedisがこっそりランダムにいくつかキーをピックアップし、「寿命切れてないかな?」とチェックして古いものを掃除する方法。
このように、見えないところで少しずつお掃除をしているからこそ、Redisはいつも軽快に動き続けられるのです。
—
2. メモリが限界!そんなときどうする?(`maxmemory-policy`)
いくらこまめにお掃除していても、次から次へと新しいデータが入くると、ついにメモリが満杯になってしまいます。
「もうこれ以上、新しいものは置けません!」となったとき、Redisに「満杯になったらどうするか?」のルールを教えてあげる設定が `maxmemory-policy`(メモリ淘汰ポリシー) です。
代表的なルールをいくつか、日常の例えで見てみましょう。
① `noeviction` (何もしない・エラーを返す)
- 例え: 「机の上のスペース? 絶対に片付けないし、新しい書類も置かせない!」
- 挙動: メモリがいっぱいになると、新しいデータを書き込もうとしたときにエラーを返します。データを絶対に失いたくない場合に選びます。
② `allkeys-lru` (最近使っていないものを消す)
- 例え: 「最近全然開いていない古いファイルから順番に捨てて、新しいスペースを作るね」
- 挙動: すべてのキーの中で、「しばらくアクセスされていない(Least Recently Used)」ものを探し出して自動的に消去します。迷ったらこれを選んでおけば大体安心という定番ポリシーです。
③ `volatile-lru` (期限付きのものの中から、最近使っていないものを消す)
- 例え: 「『いつか捨てる予定のメモ』の中から、最近見 ていないものを捨ててスペースを作るね。(大事な永久保存ファイルは絶対に残す!)」
- 挙動: 期限(TTL)が設定されているキーの中から、使われていないものを探して消します。
—
3. 実践:実際に設定をのぞいてみよう
Redisの設定ファイル(`redis.conf`)や、実行中のコマンドで、現在のポリシーを確認・変更することができます。
現在設定されているメモリ淘汰ポリシーを確認する
127.0.0.1:6379> CONFIG GET maxmemory-policy
1) “maxmemory-policy”
2) “noeviction” # 初期設定では「何もしない」になっています
ポリシーを「最近使われていないものから消す(allkeys-lru)」に変更する
127.0.0.1:6379> CONFIG SET maxmemory-policy allkeys-lru
OK
このように、システムの用途(キャッシュとして使うのか、大切なデータストアとして使うのか)に合わせて、ポリシーを柔軟に切り替えることが重要です。
—
まとめ:ここをクリアすればRedisマスターへの第一歩!
- 期限切れキーの削除は、Redisがフリーズしないように、裏側でこっそり・賢く行われている。
- メモリ淘汰ポリシー(`maxmemory-policy`)は、メモリがパンクしたときに「どのデータを犠牲にしてスペースを空けるか」のルールである。
- 用途(キャッシュサーバーなのか、永続データなのか)に合わせて、適切なポリシーを選ぶのがプロの技。
Redisのメモリ管理の裏側のドラマを知ると、なんだか愛着が湧いてきませんか?
ここをクリアできれば、あなたのRedis運用のスキルは確実にワンランクアップしています。自信を持って次のステップへ進んでくださいね!
コメント