Redis 8つの特徴
Redis 8.2 Redis 7.x 8.2 は、使い慣れた Redis プログラミング・モデルを維持しながら、ストリーム、ビットマップ、ベクトル検索、クラスタ・メトリクスの新機能を提供する。
8.2 の主な改良点は以下の通り:
- 一般的なコマンドやワークロードでパフォーマンスが大幅に向上。
- 特にJSONとキーメタデータのメモリ使用量を削減。
- ストリーム、ビット演算、ベクトル検索に新機能。
- クラスタとレプリケーションのための拡張されたメトリクスと観測可能性。
Redis 7.2 から Redis へのアップグレード 8.2
Redis 7.2 から Redis 8.2 へのアップグレード方法については、 新しいメジャーバージョンへのアップグレードを ご覧ください。
Redis モジュール
Redis 8は、高度なユースケースのために機能を拡張するいくつかの公式モジュールをサポートしています。 主なモジュールとその機能については、以下のセクションで説明する。
RedisBloom
RedisBloom は Redis の公式モジュールで、確率的データ構造を提供する:ブルーム・フィルター、カッコー・フィルター、カウント・ミン・スケッチ、Top-K。 これらの構造は、厳密さと引き換えに、極めて高い空間効率とスピードを実現しており、既知のエラー境界を持つ近似解答が許容される場合に理想的である。
RedisBloom の主な機能は以下の通り:
-
ブルーム・フィルター:ある要素が集合に含まれるかどうかをテストする。偽陽性の確率は設定可能で、偽陰性の確率は設定できない。
-
カッコー・フィルター:ブルームと似ているが、より自然に削除をサポートする。
-
Count-Min Sketch:イベントの頻度をストリーミング方式で推定する(例えば、あるキーが何回現れるか)。
-
Top-K:データストリームで最も頻度の高い項目を追跡する。
RedisBloom の典型的な使用例は以下の通り:
-
重複チェックと既出チェック(URL、Eメール、ユーザーID)。
-
不正検知と不正使用防止(全履歴を保存することなく、疑わしいパターンにフラグを立てる)。
-
Count-Min SketchとTop-Kを使用したレコメンデーションシステムとトレンドリスト。
-
プリフィルタをキャッシュすることで、不要なバックエンド・ルックアップを回避。
RedisBloom 例
エラー率1%、容量1000のブルーム・フィルターを作成する:
> BF.RESERVE bikes:models 0.01 1000
OK
モデル名の追加と確認
> BF.ADD bikes:models "Smoky Mountain Striker"
(integer) 1
> BF.EXISTS bikes:models "Smoky Mountain Striker"
(integer) 1
詳しくは、 RedisBloom フィルタのドキュメントを ご覧ください
RediSearch
RediSearch は、 Redis のためのクエリおよびインデックス作成エンジンで、全文検索、二次インデックス作成、集約、ベクトル類似検索のサポートを提供する。 RediSearch は、 Redis データ(ハッシュや JSON など)をインデックス化し、スコアリング、フィルタリング、ハイライトによる強力なクエリーを可能にします。
RediSearch の主な機能は以下の通り:
-
ステミング、音声学、ファジーマッチングによる全文検索。
-
高度なフィルター用の数値フィールド、タグフィールド、地理空間フィールド。
-
ファセット、分析、ランキングのための集計エンジン。
-
意味的検索と近似最近傍(ANN)検索のためのベクトル場との統合。
RediSearch の典型的な使用例は以下の通り:
-
フィルタとファセットによる製品カタログ検索
-
フリーテキストおよび構造化フィルタによるログおよびイベント検索。
-
ユーザーコンテンツ(ツイート、投稿、文書)のリアルタイム検索。
-
テキスト検索とベクトル検索を組み合わせたAI搭載アプリケーション。
RediSearch 例
インデックスを作成し、文書を1つ追加する:
> FT.CREATE idx ON HASH PREFIX 1 "doc:" SCHEMA title TEXT
OK
> HSET doc:1 title "hello redis"
(integer) 1
テキストで検索する:
> FT.SEARCH idx "hello"
1) (integer) 1
2) "doc:1"
3) 1) "title"
2) "hello redis"
詳しくは、 RediSearch のドキュメントを 参照。
RedisJSON
RedisJSON Redis JSONPath ライクな構文を使用する JSON ドキュメントの保存、検索、部分更新を可能にします。 RedisJSON は、サブドキュメントへの高速アクセスのために最適化され、 RediSearch などの他の Redis 機能と統合されています。
RedisJSON の主な機能は以下の通り:
-
構造化 JSON ドキュメントをファーストクラスの値として格納します。
-
文書全体を読み込むことなく、特定のパスを取得または更新します。
-
配列、オブジェクト、入れ子構造をサポート。
-
JSONフィールドをインデックス化するための検索およびクエリー機能と統合するオプション。
RedisJSON の典型的な使用例は以下の通り:
-
頻繁に更新されるネストされたフィールドを持つユーザープロファイルとセッション。
-
設定ドキュメントと機能フラグ。
-
サービス間で共有される製品カタログやコンテンツオブジェクト。
-
JSONベースのAPIでは、 Redis が高速なバッキングストアとして機能する。
RedisJSON の例だ:
単純なJSONドキュメントを保存する:
127.0.0.1:6379> JSON.SET user:1 $ '{"name":"Alice","age":30}'
OK
1つのフィールドを取得する:
127.0.0.1:6379> JSON.GET user:1 $.name
"\"Alice\""
詳しくは、 RedisJSON のドキュメントを 参照。
RedisTimeSeries
RedisTimeSeries は、時系列データの取り込み、保存、クエリ、集約、ダウンサンプリングを効率的に行うためのモジュールである。 RedisTimeSeries は、時系列データ型と関連コマンドを追加し、メトリクスとイベントを時系列でモデル化します。
RedisTimeSeries の主な機能は以下の通り:
-
自動タイムスタンプによる高スループットなインジェスト。
-
avg、min、max、sumのような集約を使用した、時間間隔のレンジクエリ。
-
長期保存のための保持ポリシーと圧縮ルール。
-
時系列の集合をグループ化し、照会するためのラベル。
RedisTimeSeries の典型的な使用例は以下の通り:
-
インフラとアプリケーションのメトリクス(CPU、メモリ、レイテンシ)。
-
IoT センサーの測定値とテレメトリー。
-
財務指標データと市場指標。
-
ビジネスKPIと業務ダッシュボード。
RedisTimeSeries 例
時系列を作成し、値を追加する:
> TS.CREATE temp:room1
OK
> TS.ADD temp:room1 * 25.3
(integer) 1736846400000
最新のサンプルを入手するには
> TS.GET temp:room1
1) (integer) 1736846400000
2) "25.3"
詳しくは、 RedisTimeSeries のドキュメントを 参照。
Redis ベクトル
Redis Vectorはベクトルデータ型とベクトルの類似検索機能を提供し、埋め込みに対する近似最近傍(ANN)クエリをサポートする。 これにより、セマンティック検索やレコメンデーションなどのAIやMLのワークロードを Redis。
Redis ベクターの主な機能は以下の通り:
-
HNSWやflatのような設定可能なインデックス・タイプを持つ高次元ベクトル(例えば128-1536次元)の保存。
-
余弦、内積、 L2 のような距離メトリックスを用いたベクトル場のK-最近傍(KNN)探索。
-
ベクトル類似度と構造化フィールドのフィルタ条件を組み合わせたハイブリッドクエリ。
-
RediSearch またはQuery Engineとの統合により、柔軟なスキーマを実現。
Redis Vectorの典型的な使用例は以下の通り:
-
RAGパイプラインのための意味論的文書検索。
-
ユーザーまたはアイテムの埋め込みを使用してパーソナライズされたレコメンデーション。
-
画像、音声、コードの埋め込みに対する類似検索。
-
学習済み埋め込みを使用した不正および異常検出。
Redis ベクトルの例:
最小限のベクトルインデックスと1つのドキュメントを作成する(4次元の例):
> FT.CREATE vIdx ON HASH PREFIX 1 "vdoc:" \
SCHEMA embedding VECTOR HNSW 6 TYPE FLOAT32 DIM 4 DISTANCE_METRIC COSINE
OK
> HSET vdoc:1 embedding "\x00\x00\x80?\x00\x00\x80?\x00\x00\x80?\x00\x00\x80?"
(integer) 1
KNNは最も近いベクトルを検索する:
> FT.SEARCH vIdx "(*=>[KNN 1 @embedding $v AS score])" \
PARAMS 2 v "\x00\x00\x80?\x00\x00\x80?\x00\x00\x80?\x00\x00\x80?" SORTBY score DIALECT 2
1) (integer) 1
2) "vdoc:1"
3) 1) "embedding"
2) "\x00\x00\x80?..."
3) "score"
4) "0.000000"
詳しくは、 Vector search concepts documentationを 参照のこと。
Redis 7 から Redis 8 へのリリースノートと変更履歴
Redis 7と Redis 8の機能的な違いは以下の通り:
-
StreamsコマンドXDELEXとXACKDELが強化され、アトミックメッセージライフサイクルとよりクリーンなコンシューマーグループ管理が可能になりました。
-
大規模なビットセットを分析するために、より豊富なBITOP演算子を使用する拡張ビットマップ演算。
-
クエリーエンジンに統合された、より成熟したベクトル検索機能。
-
以前のリリース( 7.x )にはない、複数のセキュリティおよび安定性のための修正。
-
モジュールの配布とパッケージングは、 8.x に統合されているため、展開が簡素化されている。