Redisの研究[8]問題の概要

A、Redisのデータの有効期限ポリシーとガーベジコレクションのポリシー


     Redisのは、データと遅延戦術を使用するための結合削除定期的に削除、期限が切れていますが、両方には欠点がある。動作中のすべてのキーの定期点検のためには、ランダムなサンプルを使用したので、通常の削除ポリシー、期限切れの意志原因のパフォーマンスの問題を持っていますキーは、前者が、このようなすぐに削除期限切れとして、期限が切れているかどうかを判断します。この戦略は、キーの一部につながるまた、サーバーのメモリ使用率が高いRedisの、したがってmaxmemory- redis.confの組み合わせを必要とするので、こと、メモリに蓄積期限が切れていますポリシーは、サーバポリシーが新しいデータを書き込むための十分なメモリであるRedisのときにメモリが回収されたときに、使用するように構成
#1 noeviction 1:直接エラーを表す。
#2 LUR AllKeys:LRUに従ってキーのすべてのキーを削除するための手段;
#3 AllKeysを。 -random:内のすべてのキーにランダム削除キーを表し、
#4、揮発性サーバがキャッシュときキーのセットで表現さDBは、削除の日付を期限切れの両方として作用するRedisの場合LRU /ランダム揮発性/不揮発性-TTLが使用されています、TTLは、削除キーは、以前の時間を経過した表します。

 

第二に、Redisのキャッシュとキャッシュ雪崩の問題解決の浸透


     キャッシュの浸透と雪崩が問題として見ますが、重症度の程度を変えることができ、要求は、我々はデータの問題に得ることができる場合のRedisは、該当するキャッシュデータを発見した、その後、DBにデータ要求を送る到着したときにキャッシュの浸透に残ります上で、DBはRedisの上にキャッシュされたデータを取得し、該当するデータDBが存在しない場合、そのような要求はDBに接続異常がキャッシュ雪崩の問題を生じ、その結果、全てのDBリソースの特定の大きさおよび完全な消費に達したとき。
対応する値を見つけるためにDBからかどうかを、以下に(ヌルなどには値)を利用できる浸透の問題を解決しないように、キャッシュのアイデアは、キャッシュRedisのレコードに記録されている;ダオ層にビットと、ビットマップを維持しますRedisのデータ更新に専用のバックグラウンドスレッドは約したがってキャッシュ浸透を回避し、期限切れになる、対応するキーを記録する冗長DB動作を回避するように、対応する値を有するかどうか。
データセットを避けるために、ランダムな時間値の同じ有効期限が設けられており、以下で利用可能な問題のキャッシュを解決するための雪崩のアイデアは、ときにキャッシュ要求の失敗の多数DBデータへのキュー要求にそうことを、DB接続ミューテックスに追加されます集団的故障データ、ダブルバッファまたは複数のキャッシング戦略が会うキャッシュ温暖化に必要です。

 

2.1キャッシュ雪崩は何ですか?

キャッシュの有効期限が切れている時間をかけて集中している場合は、キャッシュの浸透の多くが発生し、すべてのクエリは、キャッシュ雪崩で、その結果、データベース上に落ちます

オリジナルのキャッシュ無効化するので、新しいキャッシュがまだCPUとメモリ上のデータベース巨大な圧力は、深刻なデータベースのダウンタイムを引き起こす可能性がありながら、データベースを照会するために行くべき時にキャッシュへのアクセスのためのすべての要求を達しました

2.2)、キャッシュ雪崩を防ぐための解決策は何ですか?

1)ロックキュー

操作が戻るが正常、それ以外の場合は、キャッシュ内のデータベースとバックをロードするために進む前に、あなたはキャッシュ全体の再試行方法を取得するときに、ミューテックスキーを設定するには、SETNXのRedisのを解決するために、ミューテックスミューテックス

2)データ予熱

キャッシュラインを予熱するシステムになった後、関連データを直接キャッシュバッファシステムにロードされます。これは避けることができたときに、ユーザーの要求、最初のクエリのデータベース、その後、データ・キャッシュの問題。直接クエリキャッシュデータへのユーザーが以前に予熱し。キャッシュリロード機構を介して、手動で異なる負荷にキャッシュキーをトリガするために、差し迫った大同時アクセスする前に、事前にキャッシュを更新します

3)ダブルキャッシュポリシー

C1キャッシュの有効期限が短期的に設定されているオリジナルのキャッシュC1、C2は、C1が失敗したとき、あなたはC2を訪問することができ、キャッシュのコピーである、C2は、長期的に設定されています

4)定期的にキャッシュポリシーを更新

あまり厳しいキャッシュの有効性、積載初期化コンテナを起動、または削除するタイミングタスクはキャッシュを更新します

5)できるだけ均一キャッシュミスの時点に異なる有効期限の時刻を設定します

 

第三に、キャッシュの内訳

1)絶縁破壊キャッシュとは何ですか?

通常の並行システムでは、多数の要求を同時にキーを照会、この時点でのキーがちょうど失敗し、それが上にデータベースをヒットする要求の多くにつながります。この現象は、我々はキャッシュ内訳を呼び出します

2)、すべての問題をもたらすだろう

一度に過度のデータベース要求、圧力サージ原因

3)どのように解決します

上記の現象は、我々はそれをロックする最初のクエリ要求のデータにmutexロックを使用することができ、データベースにこのデータを照会するために複数のスレッドです

他のスレッドは、データを照会するスレッドを順位付け、ロック待ちを取得することはできませんここまで来ると、キャッシュを行います。スレッドは、キャッシュが発見された戻ってきて、キャッシュに直接移動します

 

第四に、キャッシュの浸透

1)キャッシュ貫通とは何ですか?

キャッシュの浸透がないデータベースで、ユーザーのクエリデータを参照し、自然にキャッシュ内には存在しません。対応するキーが値のキャッシュ内に見つからなかったユーザーのクエリでこの結果は、再クエリに毎回データベースを再度、その後、空(2件の引き合いに行わ役に立たないのと等価)を返します。このような要求はキャッシュダイレクトアクセスデータベースをバイパスします

2)どのような解決策の浸透をキャッシュ防ぐために?

1)キャッシュヌル値

クエリが返す場合はデータが空(データのないか、またはシステム障害が存在する)である、我々はまだ空のキャッシュ結果を参照してくださいが、その有効期限は非常に短く、もはや5分以内とします。キャッシュにこの設定はデフォルトで保存され、これを取得する2番目の時間があり、キャッシュ内の値がありますが、データベースへのアクセスを継続しません

2)使用したブルームは、ブルームフィルタをフィルタ

利点:小さなメモリフットプリント、ビットストレージ、特別な高性能、存在するハッシュキーのキーを使用するかしないが決定されます

ビットマップ十分な大きさに可能なすべてのデータは、1本のビットマップデータを存在してはならないハッシュは、このように基本的なストレージシステム上でクエリの圧力を避け、遮断されます

ブルームフィルタでは直接のリターンがない場合、クエリキャッシュが再び存在し、クエリ時間前にキャッシュに存在する、キャッシュがデータベースを照会するために行かなかったクエリのキーにブルームフィルタを行く、レイヤーを追加

第五に、いくつかの一般的なキャッシュモード

別に1、キャッシュ

ない場合、データは、一次キャッシュのキャッシュからキャッシュに読み込まれるクエリデータを適用した後、次いで、データベース内のデータを取得するためにデータベースからデータを読み取り、このデータはキャッシュキャッシュに配置されます

アプリケーションは、あなたには、いくつかのデータを更新するために、だけでなく、データベースの更新データに行きたい場合は、アップデートが完了すると、故障の命令キャッシュキャッシュを介してデータをみましょう。

1)なぜ、ここにデータをキャッシュするためにキャッシュが続き、終了後にデータベースを更新することも、それを変更されていませんか?

そうすることを主な理由は、イベントの2つの書き込み操作があり、同時恐怖の場合には、たとえば、汚れたデータにつながる2つの同時要求、要求A要求の実行とB、同時がある場合。データを読み出し要求、要求Bは、データを更新する予定です。キャッシュの初期状態は、データベース更新の満了後、ちょうど更新データ要求Bに、現時点では書き込みの時間をバックアップする準備ができてデータAを、読み出し要求は、キャッシュを更新するために行ったとき、何のデータではありませんそして、要求Aを下りますライトキャッシュデータが古く、汚れたデータに属し、

2)別にキャッシュモードは、ダーティデータの問題はありませんか?

また、極端な場合にダーティデータを生成することができます。例えば、2つのAとの要求と同時B要求の実行、しばらく。データを読み出し要求、要求は、データBを書き込むために起こっています 初期状態のキャッシュは、このデータを持っていない場合は、キャッシュは、データベース内のデータがデータに読まれません見つけ、データ準備ライトバックキャッシュを読んで要求し、この時点では、要求Bは、書き込みデータ要求に起こっていますデータベースBにデータを書き込んだ後、キャッシュの無効化を提供しました。今回は、A要求のためには、前に、キャッシュに、それは古いデータを入力するには、この時点で書き込まれたデータを書き始めた、データベース内の古いデータを読み込みます。だから、最終的にはダーティなデータが得られ、データベースにキャッシュデータで一貫性のないデータにつながります

2、読み取り/書き込みを通じて、

アプリケーションデータが読み込まれると、更新データが直接キャッシュサービスへのアクセス

データベースにデータを更新するために、キャッシュの同期サービス

下のダーティデータの確率が、それは、より高い安定性の要件については、サービスをキャッシュする、強く依存キャッシングです

3、後書き模式

アプリケーションデータが読み込まれると、更新データが直接キャッシュサービスへのアクセス

キャッシングサービスは、非同期(非同期タスク経由)データベースにデータを更新します

スピードと効率が非常に高いですが、データの整合性が悪く、状況はデータが消失した可能性があり、より複雑なロジックを実現するために

公開された22元の記事 ウォンの賞賛9 ビュー8812

おすすめ

転載: blog.csdn.net/ljm_c_bok/article/details/104830069