Redisデータ構造
Redisを初めて使用する場合でも、利用可能な機能の復習が必要な場合でも、このガイドは、Redisが提供するすべてのデータ構造を理解するのに役立ちます。
Redisのデータ構造は単純です。解決しようとしている問題に完全に一致するものはないでしょう。ただし、データに適切な初期構造を選択すると、Redisコマンドを使用して必要なものを効率的に取得することができます。多くのRedisコマンドには、使用する予定の基になるデータ構造のタイプを示すプレフィックスが付いています。
プレフィックス | 用途 | 警告とよくある誤用 | |
---|---|---|---|
ハッシュ | H | オブジェクトストレージ;辞書オブジェクトを使用するものすべて | Redis自体と同様に、ユーザーがHashesで遭遇する最大の問題の1つは、キーアカウンティングです。ハッシュが不要なキーや値でいっぱいにならないようにするためのシステムが整っていることを確認してください。 |
リスト | L | キュー、スタック、循環リスト | 大きなリストにランダムアクセスを試みないでください。また、キューのバックアップに注意してください。 |
セット | S | タグ付けシステム、時系列データのバケット | 交差点と和集合は注意して使用する必要があります-セットを小さくしてください。セットは、一意を数えるための最良の方法ではありません。代わりにHyperLogLogを使用してください! |
ソートされたセット | Z | スコアボード、辞書式検索、ランダムアクセスリスト | Zsetは、最も用途の広い構造の1つであり、最も高価な構造の1つでもあります。あなたの大きなOに注意してください!オートコンプリートに並べ替えられたセットを使用している場合は、辞書式検索を処理するZRANGEBYLEXを調べることができます(ただし、UTF-8には注意してください)。 |
ストリーム | X | 時系列、キュー、メッセージ配信 | ストリームの上限に失敗することはよくあることですが、分散メッセージングシステム(特にApache Kafka)の機能と混同されることもあります。 |
文字列 | (なし) | シンプルなキャッシュ、カウンター、ビット操作 | 非常に大きな値に注意してください。この値を取得または設定すると、特定のネットワークやRedisクライアントで見つけにくい障害が発生する可能性があります。 SETNXを使用してロックシステムを構築することで、自分を傷つけるのは簡単です。 |
Redisは、特定のタイプの特殊なケースを操作するための多数の操作を提供しますが、「内部」タイプは、上記の汎用データタイプの1つです。
プレフィックス | 基になるタイプ | 用途 | 警告とよくある誤用 | |
---|---|---|---|---|
ビットマップ | ビット | 文字列 | 分析のためのスペース効率の良いフラグ | 機能に関する混乱、またはビットマップベースのシステムでのアカウンティングの複雑さを見失うこと。 |
カウンター | INCR、DECR | 文字列 | スペース効率の高い分析 | 64ビットの符号付き範囲のオーバーフローはエラーを返します |
ジオハッシュ | GEO | ソートされたセット | 店舗検索、近くのユーザーの検索 | 長距離計算、特殊な投影または高度な地理関数が必要な場所。 |
HyperLogLog | PF | 文字列 | 分析のためのユニーク数のカウント | 複数のHLLをマージするとコストがかかる可能性があります。 PFMERGEで指定するパラメーターの数には必ず上限を設けてください。 |
パブ/サブ | PUB、SUB、PSUB | (なし) | 一時的なメッセージパッシング | 耐久性のないシンプルで高速なメッセージパッシング。ストリームタイプは、ほとんどのユースケースに適しています。 |
データ構造のアクセスパターンの誤用は、辞書の誤用に似ています。すべてのページをめくって単語を検索しないでください。すべてのRedisコマンドの時間計算量は、redis.ioに記載されています。
Big Oは、何かがどのように実行されるかについての「制限的な動作」を表現する方法です。簡単な考え方は、システム内のデータ量が増えるにつれて操作がどのように実行されるかです。操作がO(1)の場合、データの量に関係なく、完了するまでに一定の時間がかかります。 O(n)である操作はデータに比例してスケーリングし、isO(n²)である操作はデータの量が増えるにつれて指数関数的に遅くなります。
より徹底的な処理については、サンプルコードとグラフを使用したbigOの簡単な紹介を参照してください。
優れたシステム設計には、基本的なアルゴリズム分析以上のものが必要ですが、時々基本をブラッシュアップし、アプリでのデータアクセスの全体的な複雑さについて考えることは価値があります。
Redisはシングルスレッドであるため、推論が容易ですが、マルチスレッドデータアクセスに精通しているだけの人にも驚きをもたらす可能性があります。Redisでは、他のデータベースよりも長時間実行される操作の方が危険です。Redisは1つのことしか実行しないためです。時間の経過とともに、長時間実行される操作により、システム全体のバックアップが発生する可能性があります。
データアクセス操作を非常にきめ細かく保つことは、Redisで優れたパフォーマンスを発揮するための鍵です。ネットワークとプロトコルの解析のためにペナルティを支払うことになりますが、Redisでの100,000 O(1)操作は、100,000要素のコレクションでの1 O(N)操作よりも望ましい場合があります。
システムの問題点をどのように見つけることができますか? SLOWLOGを定期的に確認してください(または、RedisGreenをご利用の場合は、ダッシュボードの[Slow Queries]タブをご覧ください)。 1つの操作の実行時間が長くなるほど、システムが実行しようとしている他のすべての操作が遅くなるため、短くしてください。
-
ベクトル類似性検索のためにRedisを再発見する
RedisDays NY 2022で、新しいベクトル類似性検索(VSS)機能の公開プレビューを発表しました。 VSSはRediSearch2.4の一部であり、Docker、Redis Stack、およびRedisEnterpriseCloudの無料および固定サブスクリプションで利用できます。 この記事では、ベクトルの類似性の基本とそのアプリケーションについて説明し、リソースを共有してRedisVSSの使用を開始します。 ベクトルの類似性とは何ですか? 簡単に言えば、2つ以上のベクトルがどれだけ異なる(または類似している)かを示す尺度です。ベクトルを数値のリストと考えてください。 ベク
-
REDIS(REmote DIrectory Server)–Redisチュートリアル
Redisは、オープンソース(BSDライセンス)のNoSQLデータベースです。これはインメモリデータベースです 、Key-Valueストアの概念に基づく 。 Redisはデータ構造ストアとも呼ばれます 。 すべての用語を1つずつ理解しましょう:- Key-Valueデータストア:- これはデータストレージパラダイムであり、データベースに保存されている値を一意に識別するキーに対する値としてデータが保存および取得されます。 Redisは巨大なハッシュテーブルと見なすことができます。 インメモリデータベース:- インメモリデータベースは、すべてのデータをメインメモリ(RAM)に格納するデー