ホームページ  >  記事  >  データベース  >  Redis によって引き起こされる雪崩を解決する方法

Redis によって引き起こされる雪崩を解決する方法

尚
オリジナル
2019-07-04 14:24:216782ブラウズ

Redis によって引き起こされる雪崩を解決する方法

雪崩の原因:

キャッシュ雪崩を簡単に理解すると、元のキャッシュの障害 (またはデータがキャッシュにロードされていないこと) が原因です。新しいキャッシュが到着していません。この期間中 (以下に示すように、キャッシュは通常 Redis から取得されます)、キャッシュにアクセスするはずだったすべてのリクエストがデータベースにクエリを実行するため、データベースの CPU とメモリに多大な負荷がかかります。 、データベースのダウンタイムやシステム崩壊を引き起こす可能性があります。

基本的な解決策は次のとおりです。

まず、ほとんどのシステム設計者は、一度に多数のスレッドがデータベースを読み書きしないようにするために、ロックまたはキューの使用を検討します。キャッシュ障害時のデータベースへの過剰な負荷を回避すると、データベースへの負荷をある程度軽減できますが、システムのスループットも低下します。

次に、ユーザーの行動を分析し、キャッシュの無効化時間を均等に分散するように試みます。

第三に、特定のキャッシュ サーバーがダウンしている場合は、redis プライマリとバックアップなどのプライマリとバックアップを検討できますが、二重キャッシュには更新トランザクションが含まれ、更新はダーティ データを読み取る可能性があるため、解決する必要があります。 。

Redis 雪崩効果の解決策:

1. 分散ロックを使用でき、スタンドアロン バージョンではローカル ロックを使用できます

2. メッセージ ミドルウェアの方法

3. 一次および二次キャッシュ Redis Ehchache

4. 均一に分散された Redis キーの有効期限

説明:

1. 突然、データベースサーバーへのリクエストが大量に発生する場合は、リクエスト制限を実行します。上記の仕組みにより、1つのスレッド(リクエスト)のみが動作することが保証されます。それ以外の場合は、キューに入れて待機します (クラスター分散ロック、スタンドアロン ローカル ロック)。サーバーのスループットが低下し、効率が低下します。

ロックを追加してください!

Redis によって引き起こされる雪崩を解決する方法

入力できるスレッドは 1 つだけであることを確認してください。実際、クエリ操作を実行できるリクエストは 1 つだけです。

ここで電流制限戦略を使用することもできます。 . ~

2. メッセージ ミドルウェアを使用して解決する

このソリューションが最も信頼できるソリューションです。

メッセージ ミドルウェアは高い同時実行性を解決できます。 ! !

大量のリクエストがアクセスされ、Redis に値がない場合、クエリ結果はメッセージ ミドルウェアに保存されます (MQ 非同期同期機能を使用)

Redis によって引き起こされる雪崩を解決する方法

#3. 2 次キャッシュを作成します。A1 がオリジナル キャッシュ、A2 がコピー キャッシュです。A1 が失敗した場合、A2 にアクセスできます。A1 のキャッシュ有効期限は短期に設定され、A2 は に設定されます。長期 (この点は補足です)

4. キャッシュの無効化時点をできるだけ均等にするために、キーごとに異なる有効期限を設定します。

Redis 関連の知識の詳細については、

Redis 使用法チュートリアル 列をご覧ください。

以上がRedis によって引き起こされる雪崩を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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