「Redis セットは、重複を含まない順序付けられていない文字列のコレクションです。これらは、Java HashSets や Python Sets などと非常によく似ています。最も重要なことは、O(1) 時間の複雑さで動作するため、メンバーの追加、削除、存在の確認などの基本的な操作が非常に効率的であることです。」
セットのメンバー
前述のように、Redis セットには一意の文字列項目が含まれています。既存のアイテムは Redis セットによって受け入れられず、無視されます。さらに、1 つのセットで最大 40 億個の一意の文字列を保持できます。
一意のメンバーを保持するという Redis セットの性質は、いくつかの実際のユース ケースで役に立ちます。
- ユニオン、インターセクション、ディファレンスなどの標準セット操作を実行する機能。
- Web サイトへの一意の訪問者を追跡する
- 実世界のエンティティ関係を表す
SCARDコマンド
Set Cardinality の略である SCARD コマンドは、特定のキーに格納されているセット内のメンバーの数を返します。 O(1) 時間の複雑さで動作します。つまり、SCARD コマンドの実行にかかる時間は、指定されたセット内のメンバーの数に依存しません。いつも一定の時間がかかります。
以下に示すように、SCARD コマンドの構文は非常に単純です。
SCARD set_keyセットキー: Redis セットのキー
このコマンドは、セット内のメンバーの数である整数値を返します。
ユース ケース – Web サイトへのユニーク ビジター数をカウントする
「YummyPizza」というピザ会社が、オンラインでピザを注文できる yummypizza.com という Web サイトを運営しているとします。売上と顧客ベースを追跡するために、Redis データベースを維持して、Web サイトへのすべてのユニーク ビジターを毎月保存しています。
ユーザーが YummyPizza Web サイトにアクセスするたびに、ユーザー ID を Redis データベースに追加する必要があります。また、同じユーザーをデータベースにも追加しないでください。したがって、理想的なデータ構造は、セットが一意のメンバーのみを格納する Redis セットです。
以下に示すように、5 人のユーザーが Web サイトにアクセスし、これらのメンバーが Redis データベースに追加されたとします。
SADD YummyPizza訪問者:10 月 John Mary Raza Stoinis Prince
予想どおり、整数 5 が返されました。これは、5 つのメンバーがキーに格納されているセットに追加されたことを意味します。 YummyPizza訪問者:10月。 」
一日の終わりに、会社の管理者は、Web サイトへのユニーク ビジターの総数を確認する必要があります。そのため、Set カーディナリティを計算する必要があります。幸いなことに、前述の SCARD コマンドは、このタイプのシナリオで役立ちます。
キー「」に保存されているセットでSCARDコマンドを実行しましょう YummyPizza訪問者:10月。 」
scard YummyPizza来訪者:10月
出力は 5 です。これは、指定されたセットに 5 つの一意のメンバーがあることを意味します。このコマンドの実行速度が速すぎます。 5 人のメンバーでも 50000 人のメンバーでも構いません。実行時間は一定です。
指定されたセット キーが Redis データベースに存在しないと仮定します。次に、次の例に示すように、出力は 0 になります。この場合、データベースにないキーを指定します。
カードNonExistingKey
結論
要約すると、Redis セットは一意の文字列を格納するための理想的な候補です。説明したように、Redis セットに関する最も重要なことは、関連するセット操作のほとんどが実行に一定の時間がかかることです。 SCARD コマンドは、指定されたキーに格納されている特定のセットのセット メンバーの総数を計算するために最もよく使用されるセット コマンドの 1 つです。使用可能なセット メンバーの数に関係なく、このコマンドが出力を提供するには一定の時間がかかります。最後の例で示したように、設定されたキーが存在しない場合、出力は 0 になります。