Redisは、値を指すキーを格納します。キーには、妥当なサイズまでの任意のバイナリ値を使用できます(読みやすさとデバッグの目的で、短いASCII文字列を使用することをお勧めします)。値は、5つのネイティブRedisデータ型の1つです。
1.strings — 512 MBまでのバイナリセーフバイトのシーケンス
2.ハッシュ—キーと値のペアのコレクション
3.lists —挿入順の文字列のコレクション
4.sets —順序のない一意の文字列のコレクション
5.sorted sets —ユーザー定義のスコアリングで並べられた一意の文字列のコレクション
文字列
Redis文字列はバイトのシーケンスです。
Redisの文字列はバイナリセーフ(特殊な終了文字によって決定されない既知の長さを持つ)であるため、1つの文字列に最大512メガバイトまで格納できます。
文字列は、標準的な「キー値ストア」の概念です。キーと値の両方がテキストまたはバイナリ文字列である値を指すキーがあります。
文字列で可能なすべての操作については、http://redis.io/commands/#stringを参照してください
ハッシュ
Redisハッシュは、キーと値のペアのコレクションです。
Redisハッシュは多くのキーと値のペアを保持します。各キーと値は文字列です。Redisハッシュは複雑な値を直接サポートしていません(つまり、ハッシュフィールドにリストまたはセットの値または別のハッシュを含めることはできません)が、ハッシュフィールドを使用して他の最上位の複雑な値を指すことができます。ハッシュフィールド値に対して実行できる唯一の特別な操作は、数値コンテンツのアトミックなインクリメント/デクリメントです。
Redisハッシュは、直接的なオブジェクト表現と、多くの小さな値をコンパクトに格納する方法の2つの方法で考えることができます。
直接的なオブジェクト表現は簡単に理解できます。オブジェクトには、名前(ハッシュのキー)と、値を持つ内部キーのコレクションがあります。例については、以下の例を参照してください。
ハッシュを使用して多くの小さな値を保存することは、賢いRedisの大容量データストレージテクニックです。ハッシュのフィールド数が少ない場合(〜100)、Redisはハッシュ全体のストレージとアクセス効率を最適化します。Redisの小さなハッシュストレージの最適化は興味深い動作を引き起こします。10,000個のトップレベルキーが文字列値を指すよりも、それぞれ100個の内部キーと値を持つ100個のハッシュを持つ方が効率的です。この方法でRedisハッシュを使用してデータストレージを最適化するには、データが最終的にどこに到達するかを追跡するための追加のプログラミングオーバーヘッドが必要ですが、データストレージが主に文字列ベースである場合、この1つの奇妙なトリックを使用して、多くのメモリオーバーヘッドを節約できます。
ハッシュで可能なすべての操作については、ハッシュのドキュメントを参照してください
リスト
Redisリストはリンクリストのように機能します。
リストの先頭または末尾から、リストへの挿入、リストからの削除、リストのトラバースを行うことができます。
値を挿入順に維持する必要がある場合は、リストを使用します。(Redisは、必要に応じて任意のリスト位置に挿入するオプションを提供しますが、開始位置から遠くに挿入すると、挿入パフォーマンスが低下します。)
Redisリストは、プロデューサー/コンシューマーキューとしてよく使用されます。リストにアイテムを挿入してから、リストからアイテムをポップします。要素のないリストから消費者がポップしようとするとどうなりますか?要素が表示されるのを待ち、追加されたらすぐにそれを返すようRedisに要求できます。これにより、Redisはリアルタイムのメッセージキュー/イベント/ジョブ/タスク/通知システムに変わります。
リストの両端から要素をアトミックに削除して、リストをスタックまたはキューとして扱うことができます。
挿入するたびにリストを特定のサイズにトリミングすることで、固定長リスト(キャップされたコレクション)を維持することもできます。
リストで可能なすべての操作については、リストのドキュメントを参照してください
セット
Redisセットは、まあ、セットです。
Redisセットには、一意の順序付けされていないRedis文字列が含まれ、各文字列はセットごとに1回だけ存在します。同じ要素をセットに10回追加しても、表示されるのは1回だけです。セットは、重複した要素がたまってスペースを浪費することを心配せずに、少なくとも1回は何かが遅延して存在することを保証するのに最適です。同じ文字列がすでに存在するかどうかを確認する必要なく、何度でも追加できます。
セットは、メンバーシップのチェック、セット内のメンバーの挿入、削除が高速です。
予想どおり、セットには効率的なセット演算があります。ユニオン、交差、複数セットの差を一度に取得できます。結果は呼び出し元に返すか、後で使用するために新しいセットに保存できます。
セットはメンバーシップチェックに一定時間アクセスでき(リストとは異なり)、Redisは便利なランダムメンバーの削除と戻り(「セットからランダムエレメントをポップする」)またはランダムメンバーが交換せずに戻る(「ランダムな30人のユニークなユニークユーザーを与える」 ")または交換してください(" 7枚のカードをください。ただし、選択するたびにカードを元に戻して、再度サンプリングできるようにします ")。
セットで可能なすべての操作については、セットのドキュメントを参照してください。
ソートされたセット
Redisのソートされたセットは、ユーザー定義の順序を持つセットです。
簡単にするために、ソートされたセットは、一意の要素を持つバイナリツリーと考えることができます。(Redisのソートされたセットは、実際にはスキップリストです。)要素のソート順は、各要素のスコアによって定義されます。
ソートされたセットはまだセットです。要素は、セット内で1回だけ表示できます。要素は、一意性を目的として、文字列の内容によって定義されます。要素 "apple"を並べ替えスコア3で挿入し、要素 "apple"を並べ替えスコア500で挿入すると、並べ替えセット内の要素 "apple"が並べ替えスコア500で1つになります。セットは、(スコア、データ)のペアではなく、データに基づいてのみ一意です。
データモデルが一意性のために要素のスコアではなく文字列の内容に依存していることを確認してください。スコアの繰り返し(またはゼロ)は許可されますが、最後に、セット要素はソートされたセットごとに1つしか存在できません。たとえば、スコアをログインのエポックおよび値をユーザーIDとして、すべてのユーザーログインの履歴をソートされたセットとして保存しようとすると、すべてのユーザーの最後のログインエポックのみが保存されます。あなたのセットはユーザーベースのサイズに成長し、ユーザーベースのログインの希望サイズにはなりません*ログイン。
要素がスコアとともにセットに追加されます。任意の要素のスコアをいつでも更新できます。新しいスコアで要素を再度追加するだけです。スコアは倍精度浮動小数点数で表されるため、必要に応じて高精度のタイムスタンプの粒度を指定できます。複数の要素が同じスコアを持つ場合があります。
要素はいくつかの方法で取得できます。すべてがソートされているため、最低のスコアから始まる要素を要求できます。最も高いスコアで始まる要素を要求できます(「逆」)。要素を並べ替えスコアで自然順または逆順で要求できます。
ソートされたセットに対するすべての可能な操作については、ソートされたセットのドキュメントを参照してください。