ホームページ >データベース >Redis >Redis はデータの一貫性をどのように確保しますか?

Redis はデータの一貫性をどのように確保しますか?

(*-*)浩
(*-*)浩オリジナル
2019-11-20 14:09:299843ブラウズ

一般的に、Redis であれ memcache であれ、キャッシュを使用する限り、データベース キャッシュとデータの一貫性が関係する可能性があります。ここでは Redis を例に挙げます。

Redis はデータの一貫性をどのように確保しますか?

#Redis とデータベース間の一貫性を確保するにはどうすればよいでしょうか?

# とても簡単: (推奨学習: Redis ビデオ チュートリアル ) ## 更新したら、最初にデータベースを更新してからキャッシュを削除します。

読み取りの場合は、最初にキャッシュを読み取ります。そうでない場合は、データベースを読み取り、データをキャッシュに入れて、応答を返します。

一見すると、一貫性の問題は非常にうまく解決されているように見えます。しかし、よく考えてみると、まだ問題があることがわかります。最初にデータベースを更新し、キャッシュの削除に失敗したらどうなるでしょうか。この場合、データベースには新しいデータがあり、キャッシュには古いデータが存在し、データは不整合になります。

改善計画:

まずキャッシュを削除してからデータベースを更新します。後からデータベースの更新に失敗してキャッシュが空になったとしても、読み込み時に再度データベースから引っ張ってくるため、古いデータばかりではありますが、データの整合性は保たれています。

したがって、計画は次のようになります:

更新するときは、最初にキャッシュを削除してからデータベースを更新します。

読み取りの場合は、最初にキャッシュを読み取ります。そうでない場合は、データベースを読み取り、データをキャッシュに入れて、応答を返します。

この時点で問題は完全に解決されましたか?

実際には、そうではありません。同時実行性の高いシナリオでは、データが変更され、最初にキャッシュが削除され、次にデータベースが変更されるという状況が発生する可能性があります。変更する前にリクエストが来て、キャッシュを読みに行ったところ、キャッシュが空であることがわかりました。データベースを読みに行き、変更前の古いデータを読み取って、古いデータをキャッシュに入れました。 。

その後、データ変更プログラムによるデータベースの変更が完了しました。この時点でデータの不整合が発生しました...

解決策: Redis はデータの一貫性をどのように確保しますか?この場合、最初に「DB の変更」を変更できます。操作は JVM キューに入れられます。後続の読み取りリクエストが到着すると、「更新キャッシュ」操作も同じ JVM キューに入れられます。ジョブ スレッドの各キューは、キューの順序に従って関連する操作を順番に実行します。したがって、次の図に示すように、データの一貫性を確保するために DB が変更された後に「更新キャッシュ」が存在する必要があることが保証されます。

以上がRedis はデータの一貫性をどのように確保しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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