[TOC]
はじめに
javaのsetと同じで、setはリスト==繰り返し不可==です。setも追加、削除、変更、クエリなどが可能です。違いは、リストがO(n)のコストでクエリを実行するのに対し、setはO(1)のコストでクエリを実行することです。セットに対するクエリの実行コストはO(1)であるのに対し、リストに対するクエリの実行コストはO(n),nはリストのインデックスに依存するという違いがあります。
setは重複を許さないため、同じ要素が複数回追加された場合、最後のコピーだけが保持されます。setはセット間の集約操作をサーバー側で行うため、サーバー上で完結することができ、非常に効率的でIOネットワークの消費を節約することができます。
注文
増加
コマンド==
コマンドの説明: 指定されたキーに値を挿入します。値が存在する場合は何もしませんが、存在しない場合は追加されます。キーがセットでない構造体に対応する場合は、例外を実行します。
戻り値:実際の増加量
統計数
コマンド:==SCARD キー==
コマンドの説明: 指定されたキーのセットの要素数を取得します。
戻り値: 0: キーが存在しないか、セット内の要素が空; non-0: 実際のキーに対応するセット内の要素の数。
存在
コマンド:==SISMEMBER key element==
コマンドの説明: 指定されたキーを持つセットに要素が存在するかどうかを判定します。キーがセットされていないセットに対応する場合、例外を実行します。
0: 要素が存在しないか、キーが存在しない。
すべてのセットを取得
コマンド:==SMEMBERS key==
コマンドの説明: 指定されたキーの set のすべての要素を取得します。
戻り値:指定されたキーに対応する set の要素のリスト。key が存在しない場合は null を返します。key が set に対応しない場合は例外がスローされます。
要素のランダム削除
コマンド:==SPOP キー [count]==
コマンド説明: キーに対応するセット内の要素のカウントをランダムに取り出します。カウントは省略可能で、省略は1を意味します。セット内の要素のレイアウトは外部から制御できないため、取り出された要素は制御できません。countが集合内の要素の総数より大きければ、集合内の要素はすべて取り除かれ、countが0に等しければ何も行われません。
戻り値:取り出された要素。key に対応する set が空であるか、 key が存在しない場合は null を返します。key が set に対応しない場合は、例外がスローされます。
削除
コマンド:==SREM キーエレメント [element1 ...]==SREM キーエレメント [element1 ...==
コマンドの説明: 指定されたキーのセットから指定された要素を削除します。要素が存在しない場合は無視されます。キーが存在しない場合、操作は何も変更しません。
戻り値:実際に削除された要素の数。キーが set 以外に対応する場合は、例外がスローされます。
エレメントへのランダムアクセス
コマンド:==SRANDMEMBER キー[count]==。
コマンドの説明: 指定されたキーの集合に含まれる要素の数をランダムに返します。==この操作によって要素がセットから削除されることはありません。==countが集合の総数より大きい場合は、すべての集合の要素を返します。countが0に等しい場合は、何もしません。countが0より小さい場合は、countの要素を返します。
戻り値:セット内の要素のランダムなリスト。キーが存在しない場合は、空のリストが返されます。キーが set に一致しない場合は、例外がスローされます。
トランスファー要素
コマンド:==SMOVE source dest element==
コマンドの説明: 指定された要素を source から削除し、dest に追加します。dest が存在しない場合は作成されます。要素が source に存在しない場合は何もしません。要素が既に dest に存在する場合は、source から要素を削除します。source または dest のいずれかが設定されていない場合は、例外がスローされます。
0: 要素がソースに存在しません。
差分セット
コマンド:==SDIFF キー [key1 ....]==
説明:最初のキーの集合を基本として、次のキーの集合と最初のキーの集合の差の集合を返します。キーが存在しない場合は空集合とみなされ、いずれかのキーが集合でない場合は例外がスローされます。
戻り値: 差分要素のリスト
多様性ストレージ
コマンド:==SDIFFSTORE dest key [key1 ...]==SDIFFSTORE dest key [key1 ...]==SDIFFSTORE dest key [key1 ...==
コマンドの説明: キーの集合と、それ以降のキーに対応する集合との差分集合要素を取得し、その差分集合要素を dest に入れます。destが存在しない場合は新規作成、既に存在する場合は上書き。destが既に存在する場合は上書きし、dest,keysのいずれかが設定されていない場合は例外を実行します。
戻り値:差集合の要素数。
交差点
コマンド:==SINTER キー [key1 ...]==SINTER キー [key1 ...]==SINTER キー [key1 ...==
コマンドの説明: 指定されたキーの集合の交差要素を取得します。いずれかのキーの集合が空であるか、そのキーが存在しない場合、交点も空になります。いずれかのキーがセットでない場合は、例外がスローされます。
戻り値: 交差点要素のリスト
交差点保管
コマンド:==SINTERSTORE dest key [key1 ....]==
コマンドの説明: キーの集合の交差要素を取得し、その交差要素を dest に格納します。destが存在しない場合は作成します。destが空でなければdestを上書きし、dest,keysのいずれかが設定されていなければ例外を実行します。
戻り値:交差点の要素数
連結
コマンド:==SUNION キー [key1 ...]==SUNION キー [key1 ...]==SUNION キー [key1 ...==
コマンドの説明:キーの集合の全ての要素を連結した集合の要素を取得します。キーが存在しない場合は空集合として扱われます。キーが設定されていない場合は例外を実行します。
戻り値: 連結された要素のリスト
連結ストレージ
コマンド:==SUNIONSTORE dest key [key1 ...]==SUNIONSTORE dest key [key1 ...]==SUNIONSTORE dest key [key1 ...==
destが存在しない場合は作成し、dest,keysが設定されていない場合はdestを上書きします。destが存在する場合は上書きし、dest,keysが設定されていない場合は例外を実行。
戻り値:連結された要素の数。
例
ランダムプレゼンテーション
ホームページにはランダムな情報が表示されます:
メッセージセットを作成し、ホームページを開くたびに、そのセットからn個のランダムなエントリーを取り出します。
ランダム実行
マルチスレッド条件では、タスクはredisのセットに保存され、各スレッドは実行するn個のランダムなタスクを取得します。
タスクのセットを作成し、一度にn個のタスクをランダムに取り出します。
白黒リスト
繰り返し不可能で、クエリ効率に優れたセットを使用して、白黒のリストを作成します。
wlホワイトリストとblブラックリストを作成し、リクエストごとに判定します。
ユーザーはブラックリストかホワイトリストに登録されます。
=== ホワイトリストの優先順位 ===
まず、ホワイトリスト => twl の交点を取得します。
ホワイトリストに登録された差分セットは、ブラックリストから除外されます。
== ブラックリストの優先順位 ==
まず、ブラックリスト => tblの交点を取得します。
ブラックリストに登録されたディファレンシャルは、ホワイトリストから除外されます。
== ブラックリストに載っているかどうかの判断 ==