分散キャッシュとデータベースデータの整合性

例として、redisとデータベースキャッシュの整合性を取り上げます

Redisキャッシュとデータベースの整合性

ソリューションを簡単に紹介

1.リアルタイム同期

強い整合性の要件が比較的高い場合は、リアルタイム同期スキームを採用する必要があります。つまり、クエリキャッシュクエリをDBから取得してキャッシュに保存することはできません。キャッシュを更新するときは、最初にデータベースを更新してから、キャッシュ設定を期限切れにします(キャッシュコンテンツを更新しないことをお勧めします) 、キャッシュの有効期限を直接設定します)。

@Cacheable:クエリ時に使用、Long型はSting型に変換する必要があることに注意してください。そうでない場合、例外がスローされます
@CachePut:このアノテーションを使用して更新時に使用され、データはDBからクエリ
されます
@CacheEvict:削除時に使用されます; @Caching:併用

2、非同期キュー

同時実行性が高い場合は、非同期キューを同期に使用でき、kafkaなどのメッセージミドルウェアを使用してメッセージの生成と消費を処理できます。
ここに画像の説明を挿入

第三に、アリの同期ツールの運河を使用します

運河の実装方法は、mysqlスレーブとマスターの同期メカニズムをシミュレートし、DBビットログログの更新を監視してキャッシュの更新をトリガーすることです。この方法では、プログラマーの手を解放し、作業負荷を軽減できますが、使用時にいくつかの制限があります。
1つのレッスンでアリババ運河を解読
ここに画像の説明を挿入

  1. マスターは、バイナリログ(バイナリログ)への変更を記録します(これらのレコードは、バイナリログイベント、バイナリログイベントと呼ばれ、show binlogイベントで表示できます)。
  2. スレーブは、マスターのバイナリログイベントをリレーログにコピーします。
  3. スレーブは、自身のデータを反映するように変更されるリレーログのイベントをやり直します。

ここに画像の説明を挿入

  1. canalはmysqlスレーブのインタラクティブプロトコルをシミュレートし、mysqlスレーブのふりをして、mysqlプロトコルにダンププロトコルを送信します
  2. mysqlマスターはダンプ要求を受信し、バイナリログをスレーブ(つまり、運河)にプッシュし始めます。
  3. Canalはバイナリログオブジェクト(元はバイトストリーム)を解析します

4番目に、UDFカスタム関数の使用

プログラミングのためのmysqlのAPIとキャッシュ同期のためのトリガーの使用に直面すると、UDFは主にc / c ++言語で実装され、学習コストが高くなります。

UDFカスタム関数は、データベースのトリガーです。これは、テーブルイベントに関連する特別なストアドプロシージャです。データベーステーブルにイベントがある場合、特定の関数の操作をトリガーします。

138の元の記事を公開 賞賛3 訪問7214

おすすめ

転載: blog.csdn.net/weixin_43719015/article/details/105443514