ホームページ  >  記事  >  データベース  >  Redis キャッシュの雪崩と侵入を解決する方法

Redis キャッシュの雪崩と侵入を解決する方法

青灯夜游
青灯夜游オリジナル
2021-07-13 15:06:372385ブラウズ

キャッシュの侵入に対する解決策: 1. 空のデータをキャッシュする; 2. ブルーム フィルターを使用する。 2. キャッシュなだれに対する解決策: 1. 対応するホットスポット キーを期限切れにしないように設定する; 2. 有効期限をずらし、有効期限にランダム生成を使用し、ホットスポット データの有効期限を長く設定する; 3. 複数のキャッシュを結合する; 4. サードパーティ Redis の調達。

Redis キャッシュの雪崩と侵入を解決する方法

このチュートリアルの動作環境: Windows 7 システム、Redis バージョン 6、DELL G3 コンピューター。

Redis キャッシュの侵入と雪崩に対する解決策

1. キャッシュの侵入

ユーザーがクエリしたキーがredis上に存在せず、対応するIDがデータベース内にも存在しない この時、不正ユーザーによる攻撃を受ける 大量のリクエストがDBに直撃し、ダウンタイムを引き起こし、システム全体に影響を与える. この現象はキャッシュペネトレーションと呼ばれます。

解決策 1: 空の文字列、空のオブジェクト、空の配列またはリストなどの空のデータもキャッシュします。コードは次のとおりです。

if (list != null && list.size() > 0) {
     redisOperator.set("subCat:" + rootCatId, JsonUtils.objectToJson(list));
} else {
     redisOperator.set("subCat:" + rootCatId, JsonUtils.objectToJson(list), 5*60);
}

解決策2: ブルーム フィルター

ブルーム フィルター:

以下に示すように、バイナリを使用して要素が配列内にあるかどうかを判断します。占有されるメモリは比較的小さく、 0 は存在しないことを表し、1 は存在することを表し、クエリの追加効率は非常に高速です。値が保存されるとき、アルゴリズムが使用され、対応する値がブルーム フィルターのコレクション上の特定の位置に保存されます。複数存在する場合があります。キー。存在しないキー値が渡されると、セットと照合されます。一致しない場合は、null が返されます。

欠点:

1、1 % ブルーム配列にキーが存在しないが、この誤判​​定率により、ある状況下ではキーが存在すると判断してしまう誤判定率 配列が長いほど誤判定率は低く、配列が短いほど誤判定率は低くなります

#2. あるキー値を削除したい場合、データベースやredisの内容は削除されますが、Bloom配列では削除できません。配列内に特定の位置があるため、キーのペアを削除する場合は 1 を 0 に変更しますが、すべてのキー値が削除されます

3。コードの複雑さも影響します。 Redis クラスターを使用する場合は、ブルーム フィルターを redis と組み合わせて使用​​する必要があります

Redis キャッシュの雪崩と侵入を解決する方法

# 2 . Redis キャッシュ雪崩

キャッシュ雪崩: キャッシュ内のデータが大量のバッチで失敗し、この使用には大量のリクエストが必要になります。ただし、Redis 内のすべてのキーが失敗したためです。 、すべてのリクエストがデータベースに送信され、ダウンタイムが発生します

解決策

1. 対応するホットスポット キーを無期限に設定します

2. ずらす有効期限、有効期限はランダムに生成され、ホットスポット データ 有効期限は長く設定でき、非ホット データは短く設定できます。
3. 複数のキャッシュを組み合わせる。たとえば、リクエストが来たとき、今すぐ redis をリクエストし、redis に存在しない場合は memcache をリクエストできます。存在しない場合は、もう一度行ってください。db
をリクエストします。 4. サードパーティの Redis を購入します (Alibaba Cloud または Tencent Cloud 上の redis)

[関連する推奨事項:

Redis ビデオ チュートリアル ]

以上がRedis キャッシュの雪崩と侵入を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。