それを使用するのRedis本当に簡単

 

Redisのは何ですか

Redisのは、根底にあるC言語のキーと値のストアデータベースを使用してオープンソースです。キャッシング、イベントパブリケーション・サブスクリプション、高速キューのシーンのために使用することができます。そして、豊富なデータ型のサポート:文字列(文字列)、ハッシュ(ハッシュ)、リスト(一覧)、セット(順不同コレクション)、ZSET(ソートセット:順序付きコレクション)

プロジェクト内のRedisのアプリケーションシナリオ

1、キャッシュデータ

最も一般的に使用され、多くの場合、データを照会する必要があるとの変化は、多くの場合、ホットデータと呼ばれる非常に頻繁ではありません。

2、メッセージキュー

例えばActiveMQの、RocketMQとしてメッセージ購読システムに対応します。データの一貫性のために高い需要がある場合は、MQを使用することをお勧めします)

3、カウンタ

このような統計的ヒット、親指レートとして、Redisのアトミックで、並行性の問題を回避することができます

4、電気の供給業者のウェブサイト情報

ページのキャッシュされた大規模な電子ビジネスプラットフォームの初期化データ。価格にチケットとあなたの家の価格ポイントを購入する際たとえば、どこのネットワークは異なるものになります。

5、ホットデータ

などリアルタイムのホットスポット、ホットマイクロブログの検索、などのニュースサイトでは、頻繁に更新する必要があります。データベースから大量のデータを直接クエリのパフォーマンスに影響を与える常にあります

愛する理由

  単一ノードのサーバーで、私たちは通常、このような

  企業、事業拡大の発展に伴い。データの膨大な量の顔は、性能低下で直接使用するMySQLの結果は、読み取りと書き込みのデータが非常に遅くなります。だから我々は、キャッシュに大量のデータを扱うことができます。

  だから今我々はこれを持っています:

  図キャッシュの役割についてのみ簡単に、私たちは、主な技術によってコピーからデータが別の読み取りを達成するとき、増加し続けると記述する必要があります

  データがキャッシュに存在する場合、データベース層には、キャッシュと直接対話MySQLからの問い合わせに行くされていない場合、直接、クライアントに返されます。これにより、データベースへの圧力を減少させる、効率を増大させます。

  通常、新しい携帯電話をリリースし、活動を買うがあるでしょう。同じ期間、サーバーは、注文要求の多くを受け取ることになります。

  私たちは、この達成するためにRedisのアトミック操作を使用する必要があり、「シングルスレッドを。」まず、私たちは番号リストpush10に出て、10個の銘柄があると想定され、在庫のリストが存在している必要があり、この数はわずか10銘柄を代表して、本当の意味を持っていません。購入後、ユーザーのすべての到着は、ユーザーが成功を買うことを示す、リストから番号をポップ。リストが空の場合、それが奪われたと述べました。ポップ操作は原子のリストであるため、多くのユーザーが同時に到着したにも関わらず、順次行われます

  オフトピック:フロントページ要求から直接購入するのは限界があり、これらの要求は、フロントではなく、バックエンドサーバーに直接傍受されています

なぜそんなに速いのRedis

1は、Redisのは、純粋なメモリ操作は、我々は必要なときに手動でハードドライブに永続化する必要があります

図2は、Redisのは、このように、マルチスレッド・コンテキストの頻繁なスイッチング動作を回避する、シングルスレッドです。

3、Redisのシンプルなデータ構造は、データの操作が比較的簡単です

基本的な実装方法の間及びそれらとクライアント間の通信のために異なる基礎となるモデル、アプリケーションプロトコルを使用して4は、システムコールシステムの機能のほとんどは、それが移動するためにいくつかの時間を無駄になりますので、RedisのVMは、自分の直接のメカニズムを構築し、同じではありませんそして、のリクエスト

図5に示すように、複数のI / O多重化モデル、非ブロッキングI / Oの使用

複数のI / Oの多重化

  I / Oの多重化技術は、複数の記述子を監視することができ、技術的なプロセスを解決したり、スレッドが起こるI / Oシステムコールにブロックされ、一度記述子が読み取りまたは書き込みのために、通常はレディ(準備ができているが、準備ができていますそのファイルディスクリプタ読み書き動作)する前に、プログラムが読み取りおよび書き込みに応じて通知することができ

データ型のシナリオのRedis

  私たちは、Redisのは、その後、異なるシナリオの下でどのように我々は選ぶことができ、5つの豊富なデータ型をサポートして前述しましたか?

  文字列は、最も一般的なデータ型である、彼は絵がbase64エンコードされた後も、指向バイナリ、JSONオブジェクトを含む、もちろん、文字列の任意の型を格納することができます。Redisの中で最大容量の文字列で512MBです、全能であると言うことができます。

ハッシュ

  一般に、このようなフォーラムシステムなどのデータ記憶構造に用いるような積分ストアユーザ情報ID、ニックネーム、アバターに使用することができます。ハッシュの構造は、単一のハッシュの要素の特定の数が不十分であるので、その中の情報を変更するには、アイテムのデシリアライゼーションの値のみが、キーによって撮影された値を変更し、その後のRedisの配列に格納され、ハッシュ・ストレージ構造圧縮とストレージは、あなたが大量のメモリを節約することができます。文字列のこの構造は存在しません。

リスト

  リストはまた、使用されている逆引き参照とトラバーサル、より便利な操作をサポートしていますが、その他の送信バッファキューデータ構造を含むいくつかの余分なメモリのオーバーヘッド、内部実装のRedisの多くを、持って来ることができる二重リンクリストとして実装されています。また、あなたはのRedisベースのページング機能、優れた性能、優れたユーザーエクスペリエンスを行い、LRANGEコマンドを使用することができます。

セット

  外部に提供する機能と機能リストのセットはそれが自動的に重複排除、あなたはデータのリストを格納する必要がある場合、データを複製したくない、あなたがセットを使用することを選択することができ、この時間に設定することができますされている特別なリストに似ています。

ソートセット

  右の条件によって再ソートすることができ、あなたは、クリック数によって、このような順位などのデータ・アプリケーションを作ることができます。

Redisのキャッシュデータの一貫性

  データとデータベース・データの真の意味をキャッシュすることは一貫不可能であり、最終的なデータは一貫して強力な2つのカテゴリに分類されています。データのためのビジネス要件が非常に強くなっている必要があります場合は、キャッシュを使用することはできません。キャッシュはのみ行うこと最終データの整合性を確保することができます。

  我々は可能な限りのデータの一貫性を確保されて行うことができます。ライブラリを削除してキャッシュを削除したり、キャッシュを削除してからデータベースを削除するかどうかを、すべてのデータの不整合が、我々は彼らの順序を保証することはできません、なぜなら、同時読み取りおよび書き込み操作の発生する可能性があります。具体的な対処戦略はまだここに入らない、ビジネスニーズに応じて決定しなければなりません。

Redisのは時代遅れとメモリのうち

  私たちは、有効期限彼のRedisのデータストアを設定することができます。しかし、キーは、それを削除する方法ですか?

  私はあなたがタイマー連続したメモリが解放されたものの、キーを監視し、非常にCPUリソースを消費する必要がある、それは定期的な削除の始まりであると思うし、後者の場合ではない見つけ、タイミングが削除した場合ので。

  Redisのは、定期的に削除された期限切れの削除に使用され、デフォルトではかつてここで検出されていない検出されたシーケンスを削除する期限切れのキーが、ランダムテストに遭遇した100ミリ秒ごとにテストされています。それがネットをすり抜けていないということ?明らかにRedisのも時代遅れのキーを取り除くために、それが直接バック、不活性Redisの削除ポリシーをトリガーする、我々は有効期限が切れたキーの読み取り/書き込み、考慮に入れ

  メモリ不足の状況は、キャッシュからのデータが表示されます見つけることができないように、Redisのは、自動的に、削除することができ、キーのユーザストアの一部であることを意味します。当社のサーバーのメモリは2Gに参加しますが、ビジネス・データ・キャッシュの開発に2Gを超えています。オペレーティングシステムを可視メモリは物理メモリに限定されるものではないですので、しかし、これは、我々のプログラムの動作には影響を与えません。物理メモリが十分でないことが問題ではありません、コンピュータが仮想メモリとしてハードドライブから領域を描画します。これは心のRedis設計された2つのアプリケーションのシーンです:キャッシング、永続ストレージ

キャッシュの内訳

  ただ圧力を緩和するために、保護層キャッシュデータベースとキャッシュデータからのクエリは、我々はデータベースを照会するつもりはない必要がある場合、追加。ハッカー、キャッシュ内のデータに頻繁にアクセスがない場合、キャッシュは存在意義を失うことになる、すべての要求のための圧力モーメントがデータベースに落ち、これはデータベース接続の例外が発生します。

ソリューション:

  1、タイマーバックグラウンドタスク、キャッシュデータを更新するためのイニシアチブを設定します。このプログラムは理解しやすいですが、操作は非常に複雑であるとき、キーとき散乱します

  2階層のキャッシュ。例えば、保護バッファ層の2層、レベル1キャッシュ無効時間が短い、長い時間のためにレベル2キャッシュの無効化。見つけるための優先順位レベル1キャッシュからの要求は、レベル1キャッシュで見つかった該当データ、スレッド、スレッドをロックし、データベースはレベル1とレベル2キャッシュに更新されてから、データを取ることがない場合には、があります。他のスレッドは、レベル2のスレッドから直接入手可能です

  図3は、傍受するためのメカニズム、内部保障正規キー値の系列を提供します。要求されたキーが正当ではない、直接リターン。

キャッシュの雪崩

  何らかの理由で雪崩キャッシュバッファに言及(例えばダウンとして、キャッシュサービスがハングアップまたは応答しない)、積分クラッシュうち、多数の要求が上記であるデータベースの崩壊、システムがクラッシュ、災害、その結果、バックエンドデータベースに達するに至りましたキャッシュは内訳を述べました。

雪崩を避ける方法:

  1、有効にする一定の時間内にランダムな間隔、異なる有効期限を設定する別のキープラスをキャッシュするために、同じ時間に集団的失敗を回避。

  2、およびキャッシュソリューションと同様の内訳は、キャッシュの元のコピーからデータを読み取るので、二次キャッシュ、キャッシュ・ミス。

  3、または過度のキューサーバの要求が同時に読み書き動作を避けるためにロックする方法を使用して。

エピローグ

  Redisの高いパフォーマンス、読み出し速度書き込み速度、110 000回/ sである81000回/ s、サポートサービス、バックアップサポート、豊富なデータ型です。

  すべてのものはRedisのは欠陥がある、二つの側面です。

  図1に示すように、データ・ストレージの量が制限されるように、インメモリデータベース、単一マシンであるとして、開発者は、タイムリーな不要なデータを削除するための必要性の推定値を進める必要があります。

  2は、修正Redisのデータは、比較的長い時間をコンテンツに再参加するために、ハードドライブのデータを永続化する必要があるときに、この時間のRedisは正常に動作していません。

おすすめ

転載: www.cnblogs.com/heqiyoujing/p/11223519.html