こんにちは! Redisの世界へようこそ。
今日は、数あるRedisのコマンドの中でも、データの「寿命」をミリ秒単位でビシッと管理できる「PEXPIREAT(ピー・エクスパイア・アット)」というコマンドについてお話しします。
「なんだか呪文みたいな名前だな…」と思いましたか? 大丈夫です。一歩ずつ、日常の例えを交えながら優しく解きほぐしていくので、安心してついてきてくださいね。
ここをクリアすれば、Redisを使った時間管理の基本はバッチリマスターできますよ!
—
1. なぜRedisには「有効期限」が必要なのか?
まずは、Redisというデータベースの性格からお話ししましょう。
Redisは、いわば「超高速なメモ帳」です。パソコンのメインメモリ(RAM)という、ものすごく回転の早い領域にデータを記憶するため、どんな重い処理も一瞬でこなします。
しかし、メモリというのは無限ではありません。使わない古いデータをいつまでも残しておくと、メモ帳のページがパンパンになって、本当に必要な新しいメモを書けなくなってしまいますよね。
そこで登場するのが「有効期限(TTL: Time To Live)」という仕組みです。「この情報は3分後には消してね」「今日の23時59分59秒になったらシュレッダーにかけてね」と、データに消しゴムをかけてもらう予約ができるわけです。
—
2. 日常で例えるなら:「賞味期限付きの冷蔵庫」
冷蔵庫を思い浮かべてください。
スーパーで買ってきたお惣菜に、「消費期限:今日の18時30分まで」とシールが貼ってありますよね。
- 通常データベース(MySQLなど): 冷蔵庫の奥深くにタッパーに入れてしまい込み、何日経ってもそのまま残り続ける(手動で捨てないといけない)。
- Redis: 時間が来たら、冷蔵庫のAIが勝手に「おっと、時間切れですね」とゴミ箱にポイっと捨ててくれる。
この「いつまでに捨てるか」を、秒単位ではなく「ミリ秒単位(1秒の1000分の1)」という超高精度で指定できるのが、今回学ぶ `PEXPIREAT` コマンドです。
—
3. PEXPIREAT ってどんなコマンド?
名前の由来をバラすと、怖くなくなります。
- P = ミリ秒(Milliseconds)
- EXPIRE = 期限切れにする
- AT = 〜の時点で(特定の未来の日時を指定)
つまり、「西暦◯年◯月◯日◯時◯分◯秒◯ミリ秒という、未来のピンポイントな瞬間を指定して、データを消滅させる」ためのコマンドです。
ここでポイントなのが、指定する時間が「あと◯秒後」という相対的な時間ではなく、「UNIX時間(ユニックスタイム)」という絶対的な未来の時刻だという点です。
UNIX時間(ミリ秒)ってなに?
コンピュータの世界では、1970年1月1日午前0分0秒(協定世界時)からの経過時間をミリ秒単位の数字で数えています。
例えば、「2025年12月31日のどこかの瞬間」を、人間にはパッと見で分からない巨大な数字(例:`1767225600000`)で表したものです。
—
4. 実際に動かしてみよう
百聞は一見に如かず。実際にRedisの操作画面(redis-cli)で、このコマンドを叩いてみましょう。
1. まず、テスト用のキーにデータを保存します
127.0.0.1:6379> SET flash_sale_item “特売の高級メロン”
OK
2. このメロンの特売終了時間を「ミリ秒のUNIX時間」で指定して消滅予約をします
※例として「1776340800000」という未来のミリ秒を指定しています
127.0.0.1:6379> PEXPIREAT flash_sale_item 1776340800000
(integer) 1
3. 「あと何ミリ秒で消える?」を覗き見してみましょう (PTTLコマンド)
127.0.0.1:6379> PTTL flash_sale_item
(integer) 863999950 # 残り時間がミリ秒で返ってくる!
指定した時間が訪れると、Redisはこの `flash_sale_item` を何の前触れもなく、スパッとメモリ上から消し去ります。
—
5. どんなときに使うの?(実務でのユースケース)
「わざわざミリ秒単位で時間を指定して、いつ使うの?」と思いますよね。
プロの現場では、次のようなシチュエーションでこの `PEXPIREAT` が大活躍します。
1. タイムセールやクーポンの厳密な終了時刻の管理
「本日の23時59分59秒999ミリ秒で、このクーポンの効力を完全に失効させたい」という時。秒単位だと、アクセスが集中したときに数秒のズレが生じるリスクがありますが、ミリ秒単位ならフェアに時間を区切れます。
2. APIのレートリミット(回数制限)のウィンドウ制御
「1分間に10回までアクセス可能」といった制限をかけるとき、その制限がリセットされる正確なミリ秒をキーの寿命として設定し、自動でお掃除させます。
—
おわりに
お疲れ様でした!
`PEXPIREAT` について、霧が晴れるように理解できたのではないでしょうか?
- Redisは高速なメモ帳で、メモリ節約のためにデータの寿命(有効期限)が設定できる。
- `PEXPIREAT` は、未来の「その瞬間(ミリ秒単位のUNIX時間)」を指定してデータを自動消滅させる高精度なコマンド。
この2つさえ押さえておけば、もうバッチリです。
実務でミリ秒単位のシビアな時間管理を求められたときは、ぜひこの `PEXPIREAT` を思い出してドヤ顔で実装してくださいね。
それでは、次のRedisの冒険へ進みましょう!
コメント