ホームページ  >  記事  >  データベース  >  Redis の雪崩と侵入に対する解決策は何ですか

Redis の雪崩と侵入に対する解決策は何ですか

醉折花枝作酒筹
醉折花枝作酒筹オリジナル
2021-06-18 10:31:283226ブラウズ

解決策は次のとおりです: 1. キャッシュの侵入、空のデータをキャッシュしてブルーム フィルターを使用することもできます; 2. キャッシュ アバランチ、対応するホットスポット キーを無期限に設定し、複数のキャッシュを組み合わせて、3 番目のキャッシュを購入できます。パーティー Redis と有効期限をずらすと、有効期限をランダムに生成できます。

Redis の雪崩と侵入に対する解決策は何ですか

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

Redis キャッシュの侵入と解決策

1. キャッシュの侵入

1. ユーザーがクエリしたキーが Redis に存在しない場合、対応する ID はデータベースが不正なユーザーによって攻撃されると、大量のリクエストがデータベースに直接ヒットし、ダウンタイムが発生し、システム全体に影響を及ぼします。この現象はキャッシュペネトレーションと呼ばれます。

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

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

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

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

短所: 1. Bloom 配列にキーが存在しない場合の誤判定率は 1% ですが、この誤判​​定率により、一定以下になります配列が長いほど誤検知率は低くなり、配列が短いほど誤検知率は高くなります。キーの値、それはデータベースと Redis の内容が削除されますが、配列内の特定の位置にキーが存在するため、Bloom 配列では削除できません。削除したい場合は、変更します。 1 から 0 ですが、その中のすべてのキーが変更されます。すべての値が削除されます。

3. 追加のコレクションを維持する必要があるため、コードの複雑さも増加します。Redis クラスターを使用する場合、Bloomフィルターは redis と組み合わせて使用​​する必要があります

Redis の雪崩と侵入に対する解決策は何ですか2. Redis キャッシュ雪崩

1. キャッシュ雪崩: キャッシュ内のデータは大きなバッチで失敗し、この使用には大量のリクエストを受信する必要がありますが、redis 内のすべてのキーが失敗すると、すべてのリクエストがデータベースに送信され、ダウンタイムが発生します

2。

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

  • 有効期限がずらされ、有効期限がランダムに生成され、ホットスポット データの有効期限が長く設定されます。

  • #複数のキャッシュの組み合わせ、例: エントリをリクエストするには、今すぐ Redis をリクエストできます。Redis が存在しない場合は、リクエストしてください。 memcache。存在しない場合は、db

  • サードパーティの Redis (Alibaba Cloud または Tencent Cloud) redis を購入します)

  • 関連チュートリアル推奨事項:

    Redis チュートリアル

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

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