やあ。Redisの世界へようこそ。
Redisといえば「キーと値のペアをメモリに保存する高速なやつ」というイメージが強いかもしれないね。でも、今日紹介する「Redis Streams」は、単なる保存場所を超えた、非常にエレガントで強力な「時系列データの記録装置」なんだ。
難しい技術用語は一旦置いておこう。まずは、これがどんな道具なのかを一緒に紐解いていくよ。
—
Redis Streamsを日常に例えると?
想像してみてほしい。君がカフェの店長だとしよう。
次々にお客さんが注文をしてくるよね。それを「注文が入った順に、ノートに書き留めていく」様子をイメージしてほしい。
1. 注文が来るたびにノートに書く(データが追加される)
2. 書いた順番は絶対に変えない(時系列の維持)
3. 後から読み返せる(過去のデータの参照)
これが、Redis Streamsの正体だ。単なるメモ帳ではなく、「誰がいつ何をしたか」を時系列順に、漏らさず記録し続けるための専用の台帳なんだよ。
—
1. データを書き込む:XADDコマンド
早速、この「台帳」にデータを書き込んでみよう。使うコマンドは `XADD` だ。
XADD [ストリーム名] [ID] [フィールド] [値]
を指定すると、Redisが自動で「今の時刻」をIDにしてくれる
XADD my-cafe-orders coffee-type “latte” customer-name “Alice”
- `my-cafe-orders`: この台帳の名前だ。
- “: ここがポイント。IDを自分で決めなくても、Redisが今の正確な時刻を使って自動でIDを作ってくれるんだ。「今この瞬間に記録した」という証拠だね。
- `coffee-type “latte”`: 記録したい中身(フィールドと値)だ。
これだけで、君のカフェの注文台帳に、最初の一行が書き込まれたよ。
—
2. IDの秘密:なぜ「時間」が組み込まれているのか?
ここで少しだけ、本質的な話をしよう。Redis StreamsのID(例: `1715678901234-0`)には、とてつもないこだわりが詰まっている。
このIDは、「ミリ秒単位のタイムスタンプ」+「連番」という構造をしているんだ。
- なぜ時間が入っているのか?
「昨日注文したデータ」と「今注文したデータ」を、わざわざ並び替えなくてもIDを見るだけで、どちらが先か一目でわかるようにするためだ。
- なぜ連番がついているのか?
もし1ミリ秒の間に2つ注文が入ったらどうする?そんな時でも、後半の連番が `0, 1, 2…` と増えることで、絶対に順番が狂わないようになっているんだ。
これは、大規模なシステムで「データの整合性」を守るための、非常に洗練されたアーキテクチャだよ。
—
3. データの読み取り:XREAD(少しだけ覗き見)
書いたデータは、`XREAD` で読み出すことができる。
0というIDを指定すると、最初から全部読み出すという意味になる
XREAD STREAMS my-cafe-orders 0
実行すると、こんな風に返ってくるはずだ。
`”1715678901234-0″` というIDと、その中身(latte, Alice)がセットになって現れる。これが、「時系列データの歴史」そのものさ。
—
今日一番覚えておいてほしいこと
Redis Streamsは、単にデータを保存する場所じゃない。
「発生した出来事を、その瞬間の時間と共に、順番通りに記憶し続ける記録媒体」なんだ。
今の君は、単に「Redisを使える人」から、一歩進んで「イベント駆動なアーキテクチャの入り口に立った人」になった。
ログの収集、チャットの履歴管理、センサーデータの監視……これらがなぜRedis Streamsで解決できるのか、なんとなく見えてきたかな?
ここをクリアすれば、Redisの基本はバッチリマスターできたも同然だ。
次は、このストリームを複数の仲間(消費者)で分担して処理する「コンシューマーグループ」という面白い概念に挑戦してみよう。準備ができたら、またいつでも聞きに来ておくれ。
エンジニアとしての冒険は、まだ始まったばかりだよ。頑張ろう。
コメント