例として、redisとデータベースキャッシュの整合性を取り上げます
Redisキャッシュとデータベースの整合性
ソリューションを簡単に紹介
1.リアルタイム同期
強い整合性の要件が比較的高い場合は、リアルタイム同期スキームを採用する必要があります。つまり、クエリキャッシュクエリをDBから取得してキャッシュに保存することはできません。キャッシュを更新するときは、最初にデータベースを更新してから、キャッシュ設定を期限切れにします(キャッシュコンテンツを更新しないことをお勧めします) 、キャッシュの有効期限を直接設定します)。
@Cacheable:クエリ時に使用、Long型はSting型に変換する必要があることに注意してください。そうでない場合、例外がスローされます
@CachePut:このアノテーションを使用して更新時に使用され、データはDBからクエリ
されます
@CacheEvict:削除時に使用されます; @Caching:併用
2、非同期キュー
同時実行性が高い場合は、非同期キューを同期に使用でき、kafkaなどのメッセージミドルウェアを使用してメッセージの生成と消費を処理できます。
第三に、アリの同期ツールの運河を使用します
運河の実装方法は、mysqlスレーブとマスターの同期メカニズムをシミュレートし、DBビットログログの更新を監視してキャッシュの更新をトリガーすることです。この方法では、プログラマーの手を解放し、作業負荷を軽減できますが、使用時にいくつかの制限があります。
1つのレッスンでアリババ運河を解読
- マスターは、バイナリログ(バイナリログ)への変更を記録します(これらのレコードは、バイナリログイベント、バイナリログイベントと呼ばれ、show binlogイベントで表示できます)。
- スレーブは、マスターのバイナリログイベントをリレーログにコピーします。
- スレーブは、自身のデータを反映するように変更されるリレーログのイベントをやり直します。
- canalはmysqlスレーブのインタラクティブプロトコルをシミュレートし、mysqlスレーブのふりをして、mysqlプロトコルにダンププロトコルを送信します
- mysqlマスターはダンプ要求を受信し、バイナリログをスレーブ(つまり、運河)にプッシュし始めます。
- Canalはバイナリログオブジェクト(元はバイトストリーム)を解析します
4番目に、UDFカスタム関数の使用
プログラミングのためのmysqlのAPIとキャッシュ同期のためのトリガーの使用に直面すると、UDFは主にc / c ++言語で実装され、学習コストが高くなります。
UDFカスタム関数は、データベースのトリガーです。これは、テーブルイベントに関連する特別なストアドプロシージャです。データベーステーブルにイベントがある場合、特定の関数の操作をトリガーします。