Redisのは、文字列、ハッシュ、リスト、設定およびその他の値の型を設定ソートをサポートするオープンソースのキーと値のストレージエンジンです。理由は、その優れた性能、安定性、豊富なデータタイプから、それが広くk個のV /保存された様々なシーンに使用されます。さらにいくつかの分散キャッシュシステムにおいて、さらに、基礎となるストレージエンジンとして使用しました。この紙Redisのは、最も一般的にこのように、ユーザーが各シーンに適切なデータ型を選択し、したがって、その最高の利点を再生することができ、分析するデータの種類を使用します。
1、文字列
文字列は、データの最も一般的に使用されるタイプであり、一般的なK / V・ストレージのような分類することができ、それは内側sds.h.によって定義されます BUFの文字列を含むことに加えて、デザインの種類、またBUF追加の記憶スペース実際の文字列の残りの長さにすることにより、より柔軟な管理を提供します。特に、Redisのは、それ自体が他の機能としての性能とメモリ割り当ての基礎を改善、メモリについての追加情報を有することができるメモリ管理を、所有していることを言及すべきです。また、構造も簡単で、透明が使用することを達成するために、機能豊富なファンクション文字列に関連する業務の一部を提供します。
一般的に使用されるコマンド:
コマンド |
時間複雑 |
説明 |
返却値 |
APPEND |
O(1) |
キーが既に存在する場合、既存の値のパラメータ値の末尾にデータを追加するためのコマンドを追加します。キーが存在しない場合、コマンドは、新しいキー/値を作成しますAPPEND。 |
値の長さを加えた後 |
INCR |
O(1) |
指定されたキー値の原子を1増加させます。キーが存在しない場合は、その初期値は0、INCR後の値1です。値の値を整数値に変換できない場合、操作は失敗し、適切なエラーメッセージが返されます。 |
バリュー値はインクリメント |
INCRBY |
O(1) |
指定されたキー値の原子は、増分を増やします。キーが存在しない場合は、その初期値は0、incrbyインクリメント後の値です。値の値を整数値に変換できない場合、操作は失敗し、適切なエラーメッセージが返されます。 |
値が増加した値 |
DECR |
O(1) |
指定されたキー値の原子が減らさ。キーが存在しない場合は、その初期値は0、DECR後-1の値です。値の値を整数値に変換できない場合、そのようなハローとして、動作が失敗し、適切なエラーメッセージが返されます。 |
値を減少させる値。 |
DECRBY |
O(1) |
指定されたキー値をアトミック減少減少。キーが存在しない場合は、その初期値は0、decrbyの-decrement後の値です。値の値を整数値に変換できない場合、そのようなハローとして、動作が失敗し、適切なエラーメッセージが返されます。 |
値の値が小さくなります。 |
取得する |
O(1) |
指定されたキー値を取得します。値がこのキーに関連付けられた文字列型でない場合は、Redisのはエラーメッセージを返します。 |
キーが存在しない場合、このキー値に関連付けられている、それはnilを返します。 |
セット |
O(1) |
キーホルダーはキーが既に存在する場合、その前の値が上書きされ、指定された文字列値を設定します。 |
「OK」を返します |
2、ハッシュ
ハッシュタイプフィールドは、文字列値であり、マッピングテーブルはdict.h.によって定義されます キーフィールドの複数の値に対応するフィールドに対応してもよいです。メモリを節約することができ、文字列型として格納され、オブジェクト全体に、より便利にアクセス可能なオブジェクトはハッシュ・タイプとして格納され、各フィールドが比較されます。ハッシュ値は、ハッシュマップ内に格納され、及びMapインタフェースのメンバーへの直接アクセスを提供しています。
例えば:私たちは、ユーザの詳細を保存するには、各ユーザーのためのキーとしてユーザーIDを設定し、格納された値は、名前、年齢、年齢、出生出産、アドレスやその他の情報addrの日を含め、名前が含まれています。通常、K / V・ストレージ構造であれば、一般的にユーザIDの値は、キーのそれぞれの組み合わせ、および値として、対応するコンテンツの通りです。コマンドとして、
MSETのuser1_name "ジョー・スミス" user1_age 18 user1_addr "杭州"
このモデルは、大量のデータメモリの明らかな無駄があります。ハッシュ構造のRedisのは、この問題に対する良い解決策を提供します。上記の例の場合、コマンドhmset user1に名を実行することによって、「ジョン・ドウ」18歳のaddr「杭州」
USER1キー、名前、年齢、属性などの誕生として。このような場合には、方法+キーフィールドによって、格納されたデータの重複を避けるために。
上述した構造をハッシュ、私は重要な紛争解決拡張プログラム・アプローチとハッシュテーブルと言わざるを得ない。Redisのでは、衝突が発生した場合、それはチェーン競合解決を要します。さらに、二重構造ハッシュテーブルをRedisの(HT [2])。簡単に言えば、最初のK / Vは、競合が深刻であるとき、HTは、[0]、HTは、[1]バケットサイズでHTに設定されて保存され、[0]を2回、そして徐々にHT [0]でエレメントは、HTに移行[1]。すべての要素までの移行が完了した後、次にHT [0]、HT、[1]交換アドレス。
一般的に使用されるコマンド:
コマンド |
時間複雑 |
説明 |
返却値 |
HSET |
O(1) |
キーが存在しない場合、キーフィールド内のパラメータが既に存在する場合、フィールド/値のペアを設定すると、それが元の新しい値で上書きされ、、、新しい重要なパラメータフィールド/値のペアを作成するためのコマンドをキーを指定しましたそれは価値があります。 |
図1は、フィールド0が既に存在を示し、新しいフィールドの新しい値を提供された新たなカバレッジ値と古い値を表します。 |
hget |
O(1) |
指定されたキー・フィールドは、関連付けられた値を返します。 |
パラメータまたはキーフィールドが存在しない場合、それはnilを返し、フィールド内のパラメータの関連付けられた値を返します。 |
HEXISTS |
O(1) |
フィールドキーが存在し、指定の指定を分析します。 |
図1は、存在することを示し、0はParametersキーフィールドまたは不在を示します。 |
3、リスト
一覧はadlist.hによって定義された逆挿入、検索とトラバーサルをサポートし、二重リンクリストとして実装されます。私たちは、リストのヘッドエンドから要素を追加または削除するには、ポップ操作をプッシュすることができます。このようなデータ構造は、キューを必要とする場合、リストは非常に豊富なインターフェイス、広く使われているバッファキュー、メッセージキューや他のシナリオを提供しています。データ構造は、これは確かに不慣れではない、友人のことを学びました。
一般的に使用されるコマンド:
コマンド |
時間複雑 |
説明 |
返却値 |
LPUSH |
O(1) |
頭の指定されたキーリスト値に関連付けられ、インサートに与えられたすべてのパラメータの値。キーが存在しない場合、コマンドは、リストの先頭からのデータの挿入後に挿入する前に、キーに関連付けられた空のリストを作成します。値は、キーの種類のリストではない場合、コマンドは、関連するエラー・メッセージが返されます。 |
リスト内の要素の数を挿入した後。 |
Hrifusः |
O(1) |
キーの挿入尾指定関連付けられたリスト値で与えられたすべてのパラメータの値。キーが存在しない場合、コマンドは、データがリストの最後に挿入された後、次いで、挿入する前にキーに関連付けられている空のリンクリストを作成します。値は、キーの種類のリストではない場合、コマンドは、関連するエラー・メッセージが返されます。 |
リスト内の要素の数を挿入した後。 |
LPOP |
O(1) |
バックポップとキー、すなわち、ヘッド素子に関連するリンクリストの最初の要素を指定します。キーが存在しない場合は、nilを返します。 |
リスト要素のヘッド。 |
RPOP |
O(1) |
戻って、要素を末尾され、リストに関連付けられている指定されたキーの最後の要素をポップ。キーが存在しない場合は、nilを返します。 |
リスト要素テール。 |
埋めます |
O(1) |
リスト内の指定された番号に関連する主な要素を返すキーが存在しない場合は、0が返されます。キー値の型がリストに関連付けられていない場合は、関連するエラー・メッセージが返されます。 |
リスト内の要素の数。 |
4、セット
提供セットコレクション型は、機能のリストですが、また自動的に重い行くことができます。その内部実装は、実際にはヌル値の値のハッシュマップであるため、また、単純な重量決意にデータを有効にするために使用され、インターフェイスの他のセットのメンバーか否かのような重要となります。いくつかのシナリオがリストを格納する必要があり、データを複製したくない場合は、あなたがに対処するために、この構造を設定することを選択できます。
一般的に使用されるコマンド:
コマンド |
時間複雑 |
説明 |
返却値 |
SADD |
O(N) |
Nの時間複雑度は、操作部材の数を表します。挿入プロセスパラメータがすでに設定でいくつかのメンバーに存在している場合、他のメンバーはまだ適切に挿入される一方で、メンバーは、無視されます。キーが存在しないの前にコマンドが実行された場合、コマンドは、新しいセット、そしてパラメータのメンバーは、その後、連続的に挿入を作成します。キーは、値のタイプを設定していない場合、コマンドは、関連するエラー・メッセージが返されます。 |
挿入されたメンバーの実際の数の動作を制御します。 |
SREM |
O(N) |
Nの時間計算量は、削除するメンバーの数を表します。キーが存在しない場合は指定されたメンバーのキーに関連付けられたパラメータは、存在しないパラメータのメンバーは無視されますセットから削除、それが空のセットの処理として扱われます。 |
メンバーの実際の数はゼロへの復帰が存在しない場合、セットから削除します。 |
SCARD |
O(1) |
メンバーの数が設定されます。 |
キーが存在しない場合は、見返りに会員数を設定し、0が返されます。 |
SISMEMBER |
O(1) |
パラメータ指定したメンバーは、すでに収集と関連したキーセットに存在するかどうかを決定します。 |
1表示已经存在,0表示不存在,或该Key本身并不存在。 |
5、Sort Set
Sort Set的功能与Set非常相似,只不过它是可以通过用户提供一个优先级参数来实现自动排序的,而Set结构不会做自动排序。Sort set内部使用HashMap和SkipList来实现数据的有序存储,保证查询的效率以及元素有序性。在某些应用场景,比如需要为某个班级的学生根据成绩来排序,就可以将优先级参数设置为成绩分数,这样在插入到这个结构时,就可以实现自动的排序。
命令 |
时间复杂度 |
描述 |
返回值 |
APPEND |
O(1) |
如果该Key已经存在,APPEND命令将参数Value的数据追加到已存在Value的末尾。如果该Key不存在,APPEND命令将会创建一个新的Key/Value。 |
追加后Value的长度 |
INCR |
O(1) |
将指定Key的Value原子性的递增1。如果该Key不存在,其初始值为0,在incr之后其值为1。如果Value的值不能转换为整型值,该操作将执行失败并返回相应的错误信息。 |
递增后的Value值 |
INCRBY |
O(1) |
将指定Key的Value原子性的增加increment。如果该Key不存在,其初始值为0,在incrby之后其值为increment。如果Value的值不能转换为整型值,该操作将执行失败并返回相应的错误信息。 |
增加后的Value值 |
DECR |
O(1) |
将指定Key的Value原子性的递减1。如果该Key不存在,其初始值为0,在decr之后其值为-1。如果Value的值不能转换为整型值,如Hello,该操作将执行失败并返回相应的错误信息。 |
递减后的Value值。 |
DECRBY |
O(1) |
将指定Key的Value原子性的减少decrement。如果该Key不存在,其初始值为0,在decrby之后其值为-decrement。如果Value的值不能转换为整型值,如Hello,该操作将执行失败并返回相应的错误信息。 |
减少后的Value值。 |
GET |
O(1) |
获取指定Key的Value。如果与该Key关联的Value不是string类型,Redis将返回错误信息。 |
与该Key相关的Value,如果该Key不存在,返回nil。 |
SET |
O(1) |
设定该Key持有指定的字符串Value,如果该Key已经存在,则覆盖其原有值。 |
返回"OK"
|