ホームページ  >  記事  >  データベース  >  Redis がキャッシュを更新する方法

Redis がキャッシュを更新する方法

(*-*)浩
(*-*)浩オリジナル
2019-11-27 10:21:5010662ブラウズ

redis がキャッシュを更新するための設計パターンは 4 つあります: キャッシュ サイド、リード スルー、ライト スルー、ライト ビハインド キャッシュ。これら 4 つのパターンを 1 つずつ見てみましょう。

Redis がキャッシュを更新する方法
キャッシュ アサイド パターン

これは、最も一般的に使用されるパターンです。具体的なロジックは次のとおりです: (推奨される学習: Redis ビデオ チュートリアル )

無効化: アプリケーションは最初にキャッシュからデータを取得します。はデータベースからデータを取得します。成功したら、 をキャッシュに入れます。

ヒット: アプリケーションはキャッシュからデータをフェッチし、フェッチ後に戻ります。

更新: まずデータをデータベースに保存し、成功したらキャッシュを無効にします。

今回の更新では、まずデータベースを更新し、成功後にキャッシュを無効にすることに注意してください。では、この方法で記事の前半で述べた問題を回避できるでしょうか?それはわかります。

1 つはクエリ操作、もう 1 つは更新操作の同時実行です。まず、キャッシュ データを削除する操作はありませんが、データベース内のデータが最初に更新されます。このとき、キャッシュはまだ有効であるため、同時実行性 クエリ操作では、更新されていないデータが取得されます。

ただし、更新操作ではキャッシュがすぐに無効になり、後続のクエリ操作によってデータベースからデータが取得されます。記事の冒頭の論理の問題とは異なり、後続のクエリ操作では常に古いデータがフェッチされます。

Redis がキャッシュを更新する方法

Read Through

Read Through ルーチンは、クエリ操作中にキャッシュを更新します。キャッシュの有効期限が切れた場合 (有効期限または LRU スワップアウト)、キャッシュ アサイドは呼び出し元がデータをキャッシュにロードする責任を負いますが、リード スルーはキャッシュ サービスを使用してデータ自体をロードするため、アプリケーションに対して透過的です。

ライトスルー

ライトスルールーチンはリードスルーと似ていますが、データが更新されるときに発生します。データ更新時、キャッシュにヒットしなかった場合はデータベースを直接更新して返却します。キャッシュがヒットすると、キャッシュが更新され、次にキャッシュ自体がデータベースを更新します (これは同期操作です)

下の図は、Wikipedia のキャッシュ エントリからのものです。この例では、メモリをデータベースとして理解できます。

Redis がキャッシュを更新する方法

ライト ビハインド キャッシュ パターン

ライト ビハインドはライト バックとも呼ばれます。 Linux オペレーティング システムのカーネルを知っている学生の中には、ライトバックについてよく知っている人もいると思いますが、これは Linux ファイル システムのページ キャッシュ アルゴリズムではないでしょうか?はい、基本はすべて同じであることがわかります。したがって、基礎が非常に重要だということは、これまで一度も申し上げたことはありません。

ライトバック ルーチンを簡単に言うと、データを更新するとき、データベースではなくキャッシュのみが更新され、キャッシュはデータベースをバッチで非同期に更新します。

この設計の利点は、データ I/O 操作が非常に高速であることです (メモリが直接操作されるため)。非同期ライト バックにより、ライト バックは同じデータに対する複数の操作をマージすることもできます。したがって、パフォーマンスの向上は非常に目覚ましいものです。

ただし、これが引き起こす問題は、データの一貫性が強くなく、失われる可能性があることです (このため、Unix/Linux の異常なシャットダウンによってデータが失われることがわかっています)。

ソフトウェア設計において、アルゴリズム設計において時間と空間が交換され、空間が時間と交換されるように、欠陥のない設計を行うことは基本的に不可能です。可用性と高いパフォーマンスは相反します。ソフトウェア設計は常にトレードオフを考慮してきました。

さらに、ライトバックの実装ロジックは、どのデータが更新されたかを追跡する必要があり、永続層にフラッシュする必要があるため、比較的複雑です。オペレーティング システムのライトバックは、メモリが十分でない場合やプロセスが終了した場合など、キャッシュを無効にする必要がある場合にのみ実際に永続化されます。これは遅延書き込みとも呼ばれます。

ウィキペディアにライトバックのフローチャートがあります。基本的なロジックは次のとおりです:

Redis がキャッシュを更新する方法

Redis 関連の技術記事の詳細については、## を参照してください。 #Redis 入門チュートリアル 列で学習してください。

以上がRedis がキャッシュを更新する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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