私はRedisのそれを使用する過程で何か問題が発生していない、あなたを求めますか?例えばアバランシェキャッシュ、キャッシュの浸透、閉塞。これらの問題の原因は何ですか、それですか?どのように我々はそれを解決する必要がありますか?この記事ではこれについてお話します。
おもり
Redisのは、シングルスレッドアーキテクチャであるため、すべての読み取りと書き込みは、メインスレッドで実行されているので、チョークが発生した場合、致命的になります。
根本的な原因
(1)APIまたはデータ構造が不合理使用しました
// 获取最近的10条慢查询
slowlog get 10
飽和(2)CPU
フォークブロッキング、ブラシプレートがブロックAOF、hugepageブロッキング書き込み動作(3)持続的な閉塞に関連します
外部要因
(1)CPUの競争
(2)メモリ交換
(3)ネットワークの問題:接続が拒否されました、ネットワーク遅延、ネットワークカードソフト割り込み
ソリューション
(1)アプリケーション側でモニタ異常に加え、ノードの特定の問題を標的とする
(2)Redisの監視
キャッシュコヒーレンシ
ポリシーの更新
あなたが制御可能な範囲でのキャッシュ・スペースを確保することができるようにRedisのデータは、多くの場合、一定時間後に削除または更新する必要がライフサイクルです。キャッシュ更新ポリシーの3種類があります。
(1)LRU / LFU / FIFOアルゴリズムカリング
キャッシュの使用率が予め設定された最大を超えた場合は、データ削除のポリシーを起動します。
LRU:最近最久未使用
LFU:最近最少使用
FIFO:先进先出
残業を除く(2)
キャッシュにデータが、有効期限は、時間が自動的に削除されたセット、されていた場合。達成するために有効期限が切れるコマンドを使用します。
(3)更新するためのイニシアチブをとります
データ「CRUD」操作した後、すぐに関連するデータのRedisを削除
キャッシュの浸透
1、の概念
キャッシュの浸透データはデータベースを毎回照会し、データベースをクエリが存在しないことを意味し、クエリが空になるたびに、それぞれの時間はそれがキャッシュされません。多数の要求がでてくる場合は、データベースを圧倒できました。
2、原因
(1)セルフサービスコードまたはデータの問題
(2)空爬虫類及び他のヒット多数の原因悪意のある攻撃を、
3、ソリューション
(1)空のオブジェクト・キャッシュ
データベースがヒットしなかった場合、キャッシュ層に依然として空のオブジェクトが残っているが、再アクセスした後、データは、このようにバックエンドデータソースを保護、キャッシュから取得されます。
次のようにコードは次のとおりです。
String get(String key){
//从缓存中获取数据
String cacheValue=cache.get(key);
//缓存为空
if(StringUtils.isBlank(cacheValue)){
//从存储中获取
String storageValue=storage.get(key);
cache.set(key,storageValue);
//如果存储数据为空,需要设置一个过期时间(300秒)
if(storageValue==null){
cache.expire(key,60*5);
}
return storageValue;
}else{
//缓存非空
return cacheValue;
}
}
データヒットが高くないと頻繁にリアルタイム高のデータを変更:このソリューションは、シーンに使用されます。
(2)ブルームフィルタインターセプト
既存のキー放電Rubuロングフィルタ。クエリ要求が終わっこのフィルタを通過すると、このフィルタは、直接捨て、存在していたデータがない場合ということで、キャッシュとメモリ層へのノーさらにアクセス。
このソリューションは、該当するシーンです:データのヒットは高くない、比較的固定データ、リアルタイムの低
底なし
1、の概念
出会いのビジネスニーズにするために、クラスタの大規模な数を追加するのRedisノードが、パフォーマンスが悪化を改善しませんでした。
2、原因
クラスタで動作することができ、単一のネットワークで、より大量のキーを取得したい場合は、スタンドアローン動作では、より多くのノードは、より複雑なネットワークIOは、パフォーマンスが劣化し、パフォーマンスすることができます。
3、ソリューション
(1)シリアルコマンド
IOシリアル(2)
(3)IO平行
HASH_TAGを達成するために、(4)
キャッシュ雪崩
1、の概念
キャッシュ雪崩で、その結果、データベース上に落ちるすべてのクエリにキャッシュ、いくつかの時点で失敗に同時にリードでキャッシュ、リードを設定するときにキャッシュ雪崩は、同じ有効期限の使用を意味します。
2、ソリューション
(1)異なる鍵が、でも、できるだけキャッシュミスの時点に異なる有効期限の時間を設定します。
キャッシュデータベースが配備分散されている場合(2)、ホットデータが一様に異なるキャッシュデータベースに分布します。
(3)設定したホットデータが期限切れになることはありません。
(4)二次キャッシュを行います。
スレッドまたはキューの数を制御するためにロックすることにより、キャッシュミスした後に(5)は、書き込みキャッシュデータベースを読み取ります。例えば、1つのスレッドのみのデータと書き込みキャッシュを照会することを可能にするためのキー、他のスレッドが待機します。