ホームページ >データベース >Redis >原因分析: Redis キャッシュの二重削除の遅延

原因分析: Redis キャッシュの二重削除の遅延

WBOY
WBOY転載
2022-08-24 17:34:203269ブラウズ

推奨学習: Redis ビデオ チュートリアル

キャッシュが更新されずに削除されるのはなぜですか?

更新であり、分散トランザクションの問題がある場合、キャッシュが変更され、データベースの変更が失敗する可能性があります。キャッシュを削除するだけであれば、データベースの変更に失敗した場合でも、次のクエリでデータベースから直接データが取得されるため、ダーティなデータは表示されません。

遅延二重削除とは何ですか?

つまり、エンティティクラスを追加、削除、変更する場合には、エンティティクラスのキャッシュをクリアする必要があり、クリア位置はデータベース操作メソッドの前後になります。

矛盾による証明を採用する

最初のみ削除



原因分析: Redis キャッシュの二重削除の遅延

後でのみ削除

原因分析: Redis キャッシュの二重削除の遅延

結論

これにより、前方削除と後方削除の両方に問題があるという結論につながります。したがって、遅延二重削除戦略が採用されます。

考察 2: なぜ遅延するのか

それでも矛盾による証明です。次の図の状況は、二重削除後に古いキャッシュがまだ存在する状況を示しています。データベースの変更 -> キャッシュのクリアの前に、他のトランザクションのキャッシュ変更操作が完了していることを確認するため、遅延は です。

原因分析: Redis キャッシュの二重削除の遅延

追加: キャッシュの一貫性を確保するために二重削除を遅らせる必要がある理由

理由キャッシュの一貫性を確保するために二重削除を遅らせます

  • データベース データを変更する前に、最初に Redis を削除する必要があります。これは、データベース データの変更と Redis データの削除の間の間隔内に、がヒットした場合、このデータは Redis に存在しないことが保証されます。この削除を行わないと、データベースのデータが変更されたときに古いデータが依然として Redis から読み取られる可能性があり、データの不整合が発生します。
  • 2 回目の削除は、データベースのデータが変更された後です。このとき、redis 内の対応するデータを再度削除する必要があります。今回は、1 回目の redis の削除とデータベースのデータの変更を削除します。はリクエストです。その後、古いデータは再び redis にキャッシュされますが、次にデータベース内のデータが変更されます。今回削除しないと、データベース内の古いデータが redis に存在します。
  • では、データベースが 2 回目に変更された後、なぜ redis の削除を一定期間遅らせる必要があるのでしょうか?
  • データベースの前回の読み取りを待つために、データがキャッシュに書き込まれるのを待って、最後にダーティ データを削除するため、データベースからデータが送信されるまでにかかる時間になります。データベースをサーバー キャッシュに書き込みます

原因分析: Redis キャッシュの二重削除の遅延

ただし、遅延二重削除では、遅延時間を決定するのが非常に難しいため、遅延二重削除はお勧めできません

総合的に考慮すると、最初にデータベースが変更された場合でも、キャッシュを削除した後、一定期間古いデータが読み取られることになりますが、これは通常は許容されます。
キャッシュが時間内に削除される限り、他のスレッドは最新の値を読み取ることができます。

同時に、キャッシュが確実に削除されるようにするために、mq を使用してキャッシュが削除されることを確認できます。

メッセージが mq で繰り返し消費されない場合(キャッシュの削除)

推奨学習:Redis ビデオ チュートリアル

以上が原因分析: Redis キャッシュの二重削除の遅延の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。