[いくつかのモデルを使用してキャッシュキャッシュモード] [新宇]

キャッシュモード

別に1)キャッシュ

 

更新モード

  • データベースを更新し、キャッシュを更新します。このアプローチの最大の問題は、2個の同時書き込みダーティデータにつながっています図は、2つの同時更新操作(RedisのとMySQLの例では)以下が、データベースではなく、キャッシュを更新するためにデータベースを更新する、キャッシュを更新するために更新されます。これは、アプリケーションがダーティデータを読んでいる、矛盾しているデータベースとキャッシュのデータになります。

     

  • キャッシュを削除し、データベースを更新します。2つの同時読み取りおよび書き込み操作はダーティデータを引き起こすので、このロジックは、間違っています(例RedisのとMySQLで)の下に。更新操作はその後、ちょうど同時読み取りを持って、キャッシュを削除すると仮定した後、データベースから削除キャッシュにヒットし、バックキャッシュを古いデータを更新しなかった、データベースの更新操作を更新するには、この時間が完了しています。この時点で、データベースとキャッシュ内のデータは、アプリケーションで読み取った原稿データ(ダーティデータ)で、矛盾しています。

     

  • データベースを更新し、キャッシュを削除します。実際には、このような行為はピットとみなすことができない、実際のシステムでもこの方法を使用することをお勧めします。しかし、このアプローチは、理論的にはまだ問題がある可能性がありますされています。図は、(RedisのとMySQLの例では)、何もキャッシュヒットクエリ操作、データベースクエリからの古いデータは存在しない、次の。この時点で、読み取り後にデータベースのデータを更新し、キャッシュ内のデータを削除するには、同時更新、更新操作があります。しかし、バックキャッシュに古いデータの更新を読み出すために、データベースから読み取ります。これは、データベースとキャッシュデータは、矛盾している元のデータ(ダーティデータ)アプリケーション読み出されることになります。

     

    しかし、そのような同時の慎重、非常に低い確率だと思います。この条件は、リードキャッシュキャッシュミスで発生する必要があり、同時書き込みがありますので。これらすべての条件が満たされる確率はないが、実際にはデータベースへの書き込み動作は、読み出し動作よりもはるかに遅いが、また、ロックされ、そしてキャッシュを更新するために、書き込み動作のために遅れて、書き込み動作の前に必要なデータベース操作に読み込ま大規模な。しかし、この極端な状況で生成されたダーティデータの影響を避けるために、我々はまだキャッシュの有効期限を設定する必要があります。

2)リードスルー読み取り

 

3)ライトスルーライトスルー

 

4)ライトビハインドのキャッシング

 

おすすめ

転載: www.cnblogs.com/LiuXinyu12378/p/11328617.html