この記事では、MySQLとRedisキャッシュを同期するための2つのソリューションを紹介します。
1. ソリューション 1 (UDF)シナリオ分析: MySQLデータベースでデータ操作を実行すると、対応するデータが同時にRedisに同期されます。Redisに同期した後、クエリ操作はRedisから検索されます。 プロセスはおおよそ次のようになります。 MySQLで操作するデータにトリガーを設定し、操作を監視する クライアント(NodeServer)がMySQLにデータを書き込むと、トリガーがトリガーされ、トリガー後にMySQL UDF関数が呼び出されます。 UDF関数はRedisにデータを書き込んで同期効果を実現できる ソリューション分析:
デモケース以下はMySQLテーブルです 以下はUDFの解析コードです 対応するトリガーを定義する 2. ソリューション2(binlogの解析)ソリューション 2 を紹介する前に、まず次の図に示すように、MySQL レプリケーションの原理を紹介します。
解決策2は次のとおりです。
たとえば、クラウド データベース インスタンスの分析は次のとおりです。 クラウド データベースとローカル データベースはマスターとスレーブの関係にあります。クラウド データベースは主に書き込みサービスを提供するプライマリ データベースであり、ローカル データベースはプライマリ データベースからデータを読み取るセカンダリ データベースです。 ローカル データベースはデータを読み取った後、Bin ログを解析し、同期のためにデータを Redis に書き込みます。その後、クライアントは Redis からデータを読み取ります。 この技術的ソリューションの難しさは、MySQL Bin Log をどのように解析するかにあります。ただし、これには、binlog ファイルと MySQL に関する非常に深い理解が必要です。同時に、binlog は Statement/Row/Mixed レベルなど複数の形式で存在するため、同期を実現するために binlog を分析する作業負荷は非常に大きくなります。 キャナルオープンソーステクノロジーCanal は、純粋な Java で開発された Alibaba のオープンソース プロジェクトです。データベースの増分ログ分析に基づいて、増分データのサブスクリプションと消費を提供します。現在は主にMySQLをサポートしています(mariaDBもサポートしています) オープンソースの参照アドレスは https://github.com/liukelin/canal_mysql_nosql_sync です。 仕組み(MySQL レプリケーションを模倣):
建築: サーバーは、JVMに対応するチャネル実行インスタンスを表します。 インスタンスはデータ キューに対応します (1 つのサーバーは 1..n 個のインスタンスに対応します) インスタンスモジュール:
一般的な解析プロセスは次のとおりです。
Canclの詳細については、Baiduで検索してください。 以下は動作トポロジー図です MySQL テーブルの同期は責任連鎖モデルを採用しており、各テーブルはフィルターに対応します。たとえば、zvsync で使用されるクラスの設計は次のとおりです。 以下は、具体的な zvsync で使用されるクラスです。テーブルが追加または削除されるたびに、直接追加または削除できます。 3. 追加この記事の上記の紹介は、MySQL からキャッシュへの同期に関するものです。しかし、実際の開発では、次のような解決策を使用する人もいます。
これで、MySQL と Redis Cache の同期ソリューションに関するこの記事は終了です。MySQL と Redis Cache の同期の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Vueは2つのルーティング許可制御メソッドを実装しています
この記事では、MySQL 5.7.18のグリーンバージョンをダウンロードしてインストールする詳細な手...
1.公式サイトからインストールパッケージをダウンロードするhttp://nginx.org/en/d...
このトピックは、2012 年後半の社内共有です。まだ記事にはなっていませんが、春節が近づいているので...
目次ナンセンス実装された機能文章要点ナンセンスデモプレビュー実装された機能デフォルトでホームページが...
通常、開発プロセスでは、インターフェイス要求の成功または失敗は httpcode に基づいて決定され...
マクロタスクとマイクロタスクJavaScript はシングルスレッド言語です (マルチスレッドの場合...
目次1. 開発者プラットフォームの構成問題を解決する1. 開発者プラットフォームの構成1. 開発者プ...
まず、setIntervalはフックとしてカプセル化されます👇 'react' から...
時間は本当に存在するのでしょうか?時間は人間が考え出した概念に過ぎず、物事の変化を測る基準に過ぎない...
ウェブサイトのフロントエンド開発で発生するセキュリティ問題は、クライアントブラウザで実行されるコード...
構文: ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY...
Vue を学習する際に、vscode ターミナルで常に webpack 命令を使用すると、次のよう...
チュートリアルシリーズMySQL シリーズ: MySQL リレーショナル データベースの基本概念My...
ウェブページの自動更新: <head></head> の間に次のコードを追加...
目次オープニングシーンv-for を使用した直接レンダリングカスタムコンポーネントで直接レンダリング...