元のテキストのアドレスが更新され、読書効果が向上しました。
Redis Stream は、Redis バージョン 5.0 で新しく追加されたデータ構造です。
Redis Streamは主にメッセージキュー(MQ、Message Queue)に使用されます。Redis自体はメッセージキューの機能を実現するためにRedisパブリッシュサブスクリプション(pub/sub)を持っていますが、メッセージを永続化することができず、ネットワーク切断やRedisのダウンタイムなどが発生するとメッセージが破棄されてしまうというデメリットがあります。
簡単に言うと、パブリッシュとサブスクライブ (pub/sub) はメッセージを配布できますが、履歴メッセージを記録することはできません。
Redis Stream は、メッセージの永続化とマスターバックアップのレプリケーション機能を提供し、どのクライアントがいつでもデータにアクセスできるようにし、各クライアントのアクセス場所を記憶し、メッセージが失われないようにします。
Redis Stream の構造は次のとおりです。これには、追加されたすべてのメッセージをまとめたメッセージ リストがあります。各メッセージには一意の ID と対応するコンテンツがあります。
各ストリームには、Redis のキーとなる一意の名前があり、最初に xadd コマンドを使用してメッセージを追加するときに自動的に作成されます。
上図の分析:
- コンシューマ グループ: XGROUP CREATE コマンドを使用して作成されたコンシューマ グループ。コンシューマ グループには複数のコンシューマ (コンシューマ) があります。
- last_delivered_id: カーソル。各コンシューマ グループにはカーソル last_delivered_id があり、メッセージを読むコンシューマはカーソル last_delivered_id を前方に移動します。
- pending_ids : コンシューマ (Consumer) のステータス変数。コンシューマの未確認 ID を維持するために使用されます。pending_ids には、クライアントが現在読み取っているメッセージが記録されますが、ack (Acknowledge 文字: 確認文字) はありません。
メッセージキュー関連のコマンド:
- XADD - 最後にメッセージを追加します
- XTRIM - ストリームをトリムして長さを制限します
- XDEL - メッセージの削除
- XLEN - ストリームに含まれる要素の数、つまりメッセージの長さを取得します。
- XRANGE - メッセージリストを取得し、削除されたメッセージを自動的にフィルタリングします
- XREVRANGE - ID が大きいものから小さいものまで、逆方向にメッセージのリストを取得します。
- XREAD - ブロッキングまたは非ブロッキング方法でメッセージのリストを取得します
コンシューマ グループ関連のコマンド:
- XGROUP CREATE - コンシューマ グループを作成します
- XREADGROUP GROUP - コンシューマ グループ内のメッセージを読み取ります
- XACK - メッセージを「処理済み」としてマークします
- XGROUP SETID - コンシューマ グループの新しい最後に配信されたメッセージ ID を設定します。
- XGROUP DELCONSUMER - コンシューマを削除します
- XGROUP DESTROY - コンシューマ グループを削除します
- XPENDING - 保留中のメッセージに関する情報を表示します。
- XCLAIM - メッセージの所有権を譲渡する
- XINFO - ストリームとコンシューマ グループに関する情報を表示します。
- XINFO GROUPS - 消費者グループに関する情報を出力します。
- XINFO STREAM - ストリーム情報の印刷
# XADD
XADD を使用してメッセージをキューに追加します。指定されたキューが存在しない場合は、XADD 構文形式でキューを作成します。
XADD key ID field value [field value ...]
- key : キューの名前。キューが存在しない場合は作成します。
- ID: メッセージ ID。Redis によって生成されていることを示すために * を使用します。これはカスタマイズ可能ですが、増分は独自に保証する必要があります。
- フィールド値: レコード。
#エクストリム
XTRIM を使用してストリームをトリミングし、長さと構文形式を制限します。
XTRIM key MAXLEN [~] count
- キー : キュー名
- MAXLEN : 長さ
- カウント: 数値
#XDEL_ _
XDEL を使用してメッセージを削除します。構文形式は次のとおりです。
XDEL key ID [ID ...]
- キー: キュー名
- ID: メッセージID
#XLEN _
XLEN を使用して、ストリームに含まれる要素の数、つまりメッセージの長さを取得します。構文形式は次のとおりです。
XLEN key
- キー: キュー名
#XRANGE _
XRANGE を使用してメッセージ リストを取得すると、削除されたメッセージは自動的にフィルターされます。構文形式は次のとおりです。
XRANGE key start end [COUNT count]
- キー : キュー名
- start : 開始値、- は最小値を意味します
- end : 終了値、+ は最大値を意味します
- カウント: 数値
#XREVRANGE _
XREVRANGE を使用してメッセージ リストを取得すると、削除されたメッセージは自動的にフィルタリングされます。構文形式は次のとおりです。
XREVRANGE key end start [COUNT count]
- キー : キュー名
- end : 終了値、+ は最大値を意味します
- start : 開始値、- は最小値を意味します
- カウント: 数値
#XREAD _
XREAD を使用して、ブロッキングまたは非ブロッキング方法でメッセージ リストを取得します。構文形式は次のとおりです。
XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] id [id ...]
- カウント: 数値
- milliseconds : オプション、ブロックするミリ秒数。設定されていない場合は、非ブロッキング モードになります。
- キー : キュー名
- id : メッセージID
#Xグループ作成
XGROUP CREATE を使用してコンシューマ グループを作成します。構文形式は次のとおりです。
XGROUP [CREATE key groupname id-or-$] [SETID key groupname id-or-$] [DESTROY key groupname] [DELCONSUMER key groupname consumername]
- key : キューの名前。キューが存在しない場合は作成します。
- グループ名: グループ名。
- $ : 端からの消費を示し、新しいメッセージのみが受け入れられ、現在の Stream メッセージはすべて無視されます。
最初から消費する:
XGROUP CREATE mystream consumer-group-name 0-0
最後から消費します:
XGROUP CREATE mystream consumer-group-name $
#XREADGROUPグループ
XREADGROUP GROUP を使用してコンシューマ グループ内のメッセージを読み取ります。構文形式は次のとおりです。
XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] [NOACK] STREAMS key [key ...] ID [ID ...]
- グループ : コンシューマグループ名
- Consumer : コンシューマ名。
- count : 読み取り数。
- milliseconds : ブロックするミリ秒数。
- key : キュー名。
- ID: メッセージ ID。
XREADGROUP GROUP consumer-group-name consumer-name COUNT 1 STREAMS mystream >