Redisのシングルスレッド性能は、そのメモリ内のすべてのデータは、すべての算術演算は、メモリ・レベルであるが、シングルスレッドマルチスレッドハンドオーバ性能低下の問題を回避します。Redisのは、イベントディスパッチャはイベントプロセッサにイベントを配布するファイルに順次ファイルディスクリプタIO多重化、およびイベントキューへの接続情報、イベントディスパッチャを使用して達成しました。
データ構造と簡単な操作命令を1.Redis
文字列、リスト、セット、ハッシュ、ZSET(有序設定)
全体のRedisのは、データを格納するためのキーと値の形態です。データの種類値の異なる形式だけではありません。
文字列:シンプルなデータ構造は、例えば、我々は、ターゲット文字列保存されたJSONに変わります
キー値ストアデータを設定します
キーデータの取得を取得
あるかどうかを確認するために、キーデータが存在する、1そうでない場合は0を返すがあります
データを削除するDELキーは、いくつかの成功した操作を返さ
データのMSET KEY1 KEY2をvalue1 value2のKEY3値3 ...店舗複数のセット
MGET KEY1のke2yのKEY3 ...キーの複数のデータを取得するには、値を同様の方法マップのコレクションを返します。
秒単位でキーを2セットのキーの経過時間を期限切れ
(最初SETに相当する、ザが期限切れ)秒キー経過時間を設定SETEXキー第二の値
キーが存在する場合0リターン1を返すように設定されている場合setnxキー値が存在しない(これは、分散ロック基づいて達成することができます)
リスト:リストではなく内部のjava、リストまたはキュー/スタック構造のリストのようなRedisの。これは、その挿入が速く削除することを意味するが、インデックス位置決めすることにより、比較的低速です。最後の要素のポップアップリストは、データ構造が自動的に削除された場合、メモリが回収されます。
Redisのリストキュー構造は、多くの場合、非同期使用するために使用します。Redisの、ポーリングデータのリストから処理のために別のスレッドのリストに処理タスクを遅らせる必要があります。
キーをvalue1とvalue2の値3 ...挿入されたデータのリストをrpush
ビューllenキーの長さ
LPOPキー取得(FIFO、キューのような)添加の順序を
スタックと少し似て、キーLIFOをRPOP
回復された全体のリストの後に撮影したデータのリストを取り、そのデータは一度だけ撮影することができます。
ハッシュ:することができますだけストアオブジェクト、および文字列を使用すると、オブジェクト全体の変換を完了する必要があるときにJavaのHashMapのと同様に、文字列の比較では、プロパティの一部は、我々はデータを保存します。もちろん、消費ハッシュストレージ構造は間違いなく、文字列のそれよりも高く、
HSET redisKey hashKey1をvalue1
挿入データHSET redisKey hashKey2値2
hgetall redisKeyデータを取得し、キーと値の間隔が表示されます
HLEN redisKeyビューのハッシュ長
hget redisKeyハッシュキー取得した値に対応するハッシュキー
hmset redisKey hashKey1値1 hashKey2値2 hashKey2 VALUE3挿入バルク値
セット:類似HashSetのが、リストはに似て完了した後に撮影した最後のデータ、構造が清掃され、再度データを取得することはできません
サッドキー値
サッドキーをvalue1とvalue2のは、バルクを追加します
キー全てを見るにはsmembers
sismember値が存在するかどうかをキー値のクエリは、1を返しますが存在します
ビューSCARDキーサイズ
取得するために重要な要素をSPOP
アトムカウント動作
値が整数である場合、オペレーションも実装することができる増分(最大長maxに分散ロック、限られた増加し、実装するために使用することができるその上に直接エラー)
キーが0から1から、デフォルトでは存在しない場合、INCRキー増分
ステップサイズ設定工程を増加させるための重要なステップをincrby
2.redis持続性
Redisのはメモリで動作しているが、持続的でもあります。
一つに基づいてRDBのスナップショット、
Redisのデータベーススナップショットは、バイナリファイルdump.rdbという名前のメモリに保存されています。
それは変更の少なくともN個の第2のデータセットMを有しており、この条件が満たされるという点でのRedisは、設定することができる場合、自動的にデータセットを保存します。
もう一つはあるのAOF(追記専用ファイル)
スナップショットが最後のスナップショット以降、次回のスナップショットの状態に達していない、サービスは、現時点では問題があり、信頼できない、そしてデータは、この期間中に保存することはできませんスナップショットのバージョンにあります。今度は、AOFする必要があり、各命令は、あなたがメモリにすべてのデータを復元することができ、内部の再実行し、このコマンドファイル、Redisのは再起動すると、ファイルに記録されます。
AOFはappendonlyはい、デフォルトではオフになって開くように設定することができます
AOFは、4つの同期データ戦略を持っています、
ファイル、非常に遅いが、安全をリフレッシュするたびに操作
同期リフレッシュは毎秒:あなたは1秒以内のデータが失われる可能性があります
決して同期はリフレッシュ:必要なときに、オペレーティング・システムは、データを更新することができ、不安
デフォルトでは、第2のブラシ1回です
ミックス持続性:
RDBスナップショットデータの回復速度が、重要なデータの損失があるかもしれない、通常、データまたはAOFログの再生を回復するために使用されるが、比較的AOFに言えば場合は特に、大量のデータ、遅くなることがあります。リフレッシュAOFは、最初の最後のバージョンのスナップショットを記録し、その後、現在の増加への最後のスナップショットのバージョンを記録するときので、つまり、混合4.0永続性を持ったときに、元を上書きし、一つのファイルにマージappendonly.aofファイル。Redisのは、再起動すると最初のロードコンテンツRDBのスナップショット、その上にリプレイAOFログに増分営業の内容。
混合永続を開きますAOF-使用-RDB-プリアンブルはい
appendonly.aofコンテンツフォーマットの混在持続性は、RDBファイルのコンテンツフォーマットの一部であり、コンテンツのフォーマットは、他のAOFファイルです。
3.キャッシュ制圧戦略:
場合は、物理メモリの限界を超えRedisのメモリは、メモリとディスクのデータが頻繁にやり取りを生成するために開始されます。Redisのがより頻繁に訪問のRedisのパフォーマンスの大幅な低下を作る、効率はこのアクセスに実質的に等しい利用できません。
本番環境では、我々はメモリの最大使用を制限するために、Redisの交換動作を見えるように許可されていない、Redisのは、期待以上のメモリのサイズを制限するmaxmemory設定パラメータを提供します。
maxmemoryを超えた実際のメモリは、Redisのは、ユーザーが識字サービスを提供し続けるために、新しいスペースを作成する方法を決定できるようにするために、いくつかのオプションのポリシー(maxmemoryポリシー)をする場合提供しています。
maxmemory < バイト> #のMAXMEMORYポリシー:Redisのはmaxmemoryたときに削除するものを選択する方法 #に達しました。あなたは5つの行動の中から選択することができます: #1 #揮発性-LRU -使用>立ち退かを期限切れに設定したキーの間でLRUを近似します。 #allkeys-LRU - >近似LRUを使用して、任意のキーを立ち退かせます。 #揮発性LFU - >追い出す使用が期限切れに設定されたキーのうちLFUを近似しました。 #1 allkeys-LFU - >を使用して、任意のキーを立ち退かLFUを近似していました。 揮発性ランダム# - >有効期限は設定したものの中でランダムキーを削除します。 #1 allkeys -ランダム- >ランダムキー、任意のキーを削除します。 #揮発性-TTL - >有効期限が切れる時間(マイナーTTL)を最寄りとキーを削除します #1 noeviction - >ちょうど書き込み操作でエラーを返す、何かを立ち退かないでください。 # #LRUは、最低使用を意味 #1 LFUは、使用頻度の最も低い意味 #の #LRU、LFUおよび揮発性-TTL両方が近似使用して実装されている #乱択アルゴリズムを。 #1 #注:上記のポリシーのいずれかと、Redisのは、書き込み時にエラーが返されます 立ち退きには、適切なキーが存在しない場合、#操作。 # #あり、これらのコマンドを書い日時:設定setnx SETEXのアペンド #INCR DECR rpush lpush rpushx lpushx linsert LSET rpoplpush SADD #焼結sinterstore sunion sunionstore sdiffのsdiffstore zadd zincrby #zunionstore zinterstore HSET hsetnx hmset hincrby incrby decrby #GETSET MSET msetnxのexecソート #の #デフォルトは次のとおりです。 #1 #のmaxmemory -policy noeviction
noevictionは、書き込み要求が(デル、読み出し要求を進めることができます)を処理していきません。これは、何もデータが失われないことを保証しますが、行は、関連事業を継続することはできません書きます。これはデフォルトの制圧戦略です。
キーセットの有効期限を除去する揮発性LRU試みは、キーの優先順位を用い以上が除去されます。キーの有効期限を設定されていないがため、データの永続性を確保する必要性が突然失われることはありません、排除されることはありません。
LRUポリシーが解消されていないこと以外は、上記のような揮発性-TTL、が、優先度が排除される小さなTTL TTLの残り寿命のキー値、。
上記のように、ランダムな揮発性が、キーはランダムなキーの日付キーセットの外にあります。
allkeys-LRU揮発性-LRUは異なるが、キーの目標を段階的には、この戦略はすべてのコレクションへの鍵である、ちょうどキーコレクションを失効していません。これは排除されるキーのないセットの有効期限がないことを意味します。
allkeysランダム上記と同じではなく、戦略のうち、ランダムな鍵です。
揮発性-xxxの戦略は唯一のキーの有効期限を排除することが、allkeys-XXX戦略は、すべての主要外となります。あなただけのキャッシュとしてのRedisを取る場合、それはallkeys-XXXを使用する必要があり、クライアントは有効期限の書き込みキャッシュを持ち歩く必要はありません。あなたはRedisの永続化機能を使用して、あなたは何も設定された有効期限のキーを保持しないように、揮発性-xxxの戦略を使用したい場合、彼らは永久キーLRUアルゴリズムが解消されることはありません。