こんにちは!Redisの奥深い世界へようこそ。
世界中のシステムを裏から支えるRedisですが、怖がる必要は全くありません。今日はその中でも、データに「寿命」を持たせるためのとても便利な機能、`EXPIREAT`(エクスパイア・アット)コマンドについてお話ししますね。
ここをクリアすれば、Redisの基本的な時間管理の仕組みはバッチリマスターできますよ!ぜひ最後までお付き合いください。
—
1. Redisってどんなところ?(日常の例えで理解する)
まず、Redisという場所をイメージしてみましょう。
Redisは、例えるなら「超高速なホワイトボード」です。今すぐ必要なメモをサッと書いて、パッと見ることができる場所ですが、一つだけ弱点があります。それは「スペースが限られていること」。
ホワイトボードがいっぱいになってしまったら、古いメモは消していかないと、新しい大事なメモが書けなくなってしまいますよね。
そこで活躍するのが「有効期限(タイムリミット)」です。
「このメモは、今日の18時になったら自動的に消してね」とあらかじめ決めておけば、ホワイトボードがパンクするのを防げます。この「特定の時間までにお片付けする」という指示を出すのが、今回学ぶ`EXPIREAT`コマンドです。
—
2. EXPIREATコマンドってなに?
通常、Redisで有効期限を設定するときは「あと〇秒後に消してね」という相対的な時間を指定することが多いです(`EXPIRE`コマンドと言います)。
しかし、`EXPIREAT`は違います。
これは、「カレンダーと時計で、ピンポイントの『その瞬間』を指定して消す」コマンドです。
- EXPIRE(従来): 「ここから300秒後に消して」
- EXPIREAT(今回): 「2026年12月31日の23時59分59秒になったら消して」
このように、人間の世界でいう「○月○日 ○時○分○秒」という絶対的な時間を指定して消したいときに、このコマンドが最高のパフォーマンスを発揮します。
注意:指定するのは「UNIX時間(秒)」
ただし、Redisはコンピュータの世界の住人なので、「2026年12月31日…」という文字をそのままでは理解できません。そこで、「1970年1月1日午前0時0分0秒(協定世界時)からの経過秒数」という、コンピュータ共通の時刻表現(UNIXタイムスタンプ)に直して渡してあげます。
—
3. 食卓の「賞味期限」でイメージしてみる
例えば、あなたが冷蔵庫(Redis)に「特製お弁当」というデータを保管したとしましょう。
このお弁当には、「今日の夜の20時(UNIXタイムスタンプ:`1774867200`など)」までの賞味期限があります。
もし`EXPIREAT`を使わなかったらどうなるでしょう?
わざわざ「今から何秒後に20時になるか」を自分で計算して設定しなければなりません。これは面倒だし、計算ミスをしたら大変です。
でも、`EXPIREAT`を使えば、「お弁当の賞味期限は、あの時刻だ!」とダイレクトにセットできます。時刻を過ぎて冷蔵庫を開けたとき(データにアクセスしたとき)、お弁当は綺麗に消え去っています。
—
4. 実際のコードと使い方を見てみよう
百聞は一見にしかず。実際にRedisを操作する画面(Redis CLI)を覗いてみましょう。
今回は、イベントのチケット情報を管理するシチュエーションを考えてみます。
1. チケットの残り枚数を「100枚」としてホワイトボード(Redis)に書く
127.0.0.1:6379> SET ticket:concert 100
OK
2. このチケット販売の終了時刻を「UNIXタイムスタンプ」で指定する
※ここでは例として「1775000000」という未来の秒数を指定しています
127.0.0.1:6379> EXPIREAT ticket:concert 1775000000
(integer) 1
解説: “(integer) 1” が返ってきたら、「無事にタイマーがセットできましたよ!」という成功の合図です。
「あと何秒で消える?」を確認する
設定したタイマーがあとどれくらい残っているか、気になりますよね。そんなときは`TTL`(Time To Live)コマンドを使います。
残り寿命を「秒」単位で確認する
127.0.0.1:6379> TTL ticket:concert
(integer) 86400
解説: 「あと86400秒(ちょうど1日)でこのデータは消えますよ」と教えてくれます。
もし、指定した時間がすでに過ぎてしまっていたらどうなるでしょうか?
その場合、コマンドはすぐにデータを削除し、タイマー設定は失敗(`0`を返却)します。過去の時間を指定して「今すぐ消す」ことも実質的に可能です。
—
5. 先輩エンジニアからの実践アドバイス
最後に、現場で役立つちょっとした知恵をお伝えします。
1. タイムゾーンに気をつけよう
UNIXタイムスタンプは、世界共通の「基準時間(UTC)」で計算されるのが基本です。日本の時間(JST)とは9時間のズレがあるため、時間を計算するときは「あれ、思ってたより9時間早く消えちゃうぞ?」とならないように注意してくださいね。
2. イベントやセールの終了時刻に最適
「タイムセールは今日の23:59:59まで!」といった要件では、残り時間を計算する`EXPIRE`よりも、終了時刻のタイムスタンプをそのまま渡す`EXPIREAT`のほうが、コードが圧倒的にシンプルでバグりにくくなります。
—
おわりに
いかがでしたでしょうか?
`EXPIREAT`は、一見すると「ただのタイマー設定コマンド」ですが、「特定の時刻にスパッとデータを自動消去する」という点で、メモリ管理がシビアなRedisにおいてはなくてはならない強力な武器です。
ここをマスターしたあなたなら、Redisを使ったキャッシュ戦略や、期間限定データの管理はもうバッチリです。自信を持って次のステップへ進んでくださいね!
コメント