こんにちは。Redisの世界へようこそ。
Redisといえば「速いキャッシュ」というイメージが強いかもしれませんが、実はそれだけではありません。今日お話しする「Stream(ストリーム)」というデータ構造は、まさにRedisの真骨頂とも言える、非常にパワフルで賢い仕組みです。
エンジニアとして多くのシステムを設計してきましたが、ログやイベントを「いかに効率よく、かつ確実に管理するか」という問いに対する一つの理想的な答えが、このStreamにあります。
難しい専門用語はなるべく使わずに、まずはこの仕組みを「カフェの注文伝票」に例えて紐解いていきましょう。
—
Streamは「終わりのないデジタル伝票」
カフェのカウンターを想像してみてください。次から次へと入ってくる注文。これを一つずつ紙に書いて、棚に並べていく様子をイメージしてください。
- 誰が(ユーザーIDやデバイスID)
- 何を(注文内容)
- いつ(タイムスタンプ)
これを時系列順に、絶対に消えないように記録していく。これがRedisのStreamの正体です。
1. 注文を書き込む:`XADD`
まずは伝票を書き込みます。Redisは自動的に「今何時か」を識別するIDを付与してくれるので、私たちは中身を書くだけでOKです。
書式: XADD [ストリーム名] [ID] [フィールド] [値] …
IDに ” を指定すると、Redisが現在時刻を基に自動生成してくれます。
XADD coffee_orders user “Alice” menu “Latte”
結果: “1715000000000-0” のようなIDが返ってきます。これが伝票番号です。
“ を使うだけで、Redisが完璧に並び順を管理してくれる。これがどれほど楽なことか、後で必ず実感することになります。
2. 伝票の数を確認する:`XLEN`
「今、溜まっている注文はいくつかな?」と確認したいとき。これも一瞬です。
XLEN coffee_orders
結果: (integer) 1
カウンターの裏に何枚の伝票があるか、即座に教えてくれます。
3. 過去の注文を振り返る:`XRANGE` / `XREVRANGE`
ここがStreamの面白いところ。普通のリストとは違い、IDを指定して「特定の期間」をピンポイントで抜き出せます。
- `XRANGE`: 古い順(時系列順)に伝票をめくる
- `XREVRANGE`: 新しい順(逆順)に伝票をめくる
最初の伝票から最後までの全リストを表示
XRANGE coffee_orders – +
最新の注文を3件だけ確認したいとき(ログ調査の基本です)
XREVRANGE coffee_orders + – COUNT 3
`+` や `-` は、「一番古いところから一番新しいところまで」という記号です。これも直感的ですよね。
4. 間違った伝票を外す:`XDEL`
「あ、今の注文はキャンセルで!」となった場合。StreamではIDを指定して削除します。
XDEL coffee_orders 1715000000000-0
この番号の伝票だけが、棚から取り除かれます。
—
なぜ、わざわざStreamを使うのか?
「普通のリストやデータベースじゃダメなの?」と疑問に思うかもしれません。しかし、大規模なシステムにおいて、RedisのStreamには決定的な強みがあります。
1. 書き込みと読み込みが超高速:メモリ上で動くため、どんなに大量のログが流れてきても、システムが重くなることがありません。
2. 時系列の管理が完璧:自分で時刻を管理する必要がなく、RedisがIDに時間を埋め込んでくれるため、データの順序が狂う心配がありません。
3. 後から読み返すことができる:メッセージキューのように「一度読んだら消える」のではなく、必要なら何度でも同じ範囲を読み直すことができます。
—
さあ、次はあなたの番です
ここまで理解できれば、RedisのStreamの基礎は完全にあなたのものです。
まずは手元のRedis環境で `XADD` を数回叩いてみて、`XRANGE` で中身を覗いてみてください。画面にデータが並んだ瞬間、「あ、これがログ管理の第一歩なんだ」と手応えを感じるはずです。
エンジニアリングの本質は「複雑なことをいかにシンプルに扱うか」にあります。RedisのStreamは、まさにそのための強力な武器です。ぜひ、あなたのプロジェクトでも試してみてくださいね。
また何か詰まったら、いつでも聞きに来てください。応援していますよ!
コメント