検索
ホームページデータベースmysql チュートリアルRedis キャッシュと MySQL データの整合性メソッド

需要の原因

同時実行性の高いビジネス シナリオでは、ほとんどの場合、データベースが同時ユーザー アクセスにとって最も弱いリンクとなります。したがって、リクエストが MySQL などのデータベースに直接アクセスするのではなく、最初に Redis にアクセスできるように、redis を使用してバッファリング操作を実行する必要があります。

このビジネスシナリオは主にRedisキャッシュからのデータ読み出しの問題を解決するもので、通常は以下の図のような流れで業務が行われます。

通常、キャッシュの読み取りステップには問題はありませんが、データベースとキャッシュの更新などのデータ更新が含まれると、キャッシュ (Redis) とデータベース (MySQL) の間でデータの一貫性の問題が発生する傾向があります。

最初に MySQL データベースに書き込んでから Redis キャッシュを削除するか、最初にキャッシュを削除してからデータベースに書き込むかに関係なく、データの不整合が発生する可能性があります。例として:

1. Redis キャッシュが削除され、データベース MySQL に書き込む前に別のスレッドが読み取りを開始し、キャッシュが空であることが判明した場合、データベースからデータを読み取り、キャッシュに書き込みます。 、キャッシュにはダーティなデータが含まれています。

2. ライブラリが最初に書き込まれ、キャッシュが削除される前にライブラリを書き込んでいるスレッドがクラッシュし、キャッシュが削除されなかった場合も、データの不整合が発生します。

書き込みと読み取りが同時に行われ、順序が保証されないため、キャッシュとデータベースの間でデータの不整合が発生します。

如来が解決してくれる?ビジネスコストと技術コストに基づいて選択された、最初は簡単、次に難しい 2 つのソリューションを次に示します。

キャッシュとデータベースの一貫性ソリューション

1. 最初のオプション: 遅延二重削除戦略を採用する

## ライブラリを書き込む前後に redis.del (キー) 操作を実行し、適切なタイムアウトを設定します。

疑似コードは次のとおりです。

public void write(文字列キー、オブジェクトデータ){

redis.delKey(キー);

db.updateData(データ);

Thread.sleep(500);

redis.delKey(キー);

}

2. 具体的な手順は次のとおりです。

1) まずキャッシュを削除します

2) データベースを再度書き込みます

3) 500 ミリ秒スリープします

4) 再度キャッシュを削除します

では、この 500 ミリ秒はどのように決定され、どのくらいの時間スリープする必要があるのでしょうか?

プロジェクトの時間のかかるデータ読み取りビジネス ロジックを評価する必要があります。この目的は、読み取りリクエストが確実に終了し、書き込みリクエストによって読み取りリクエストによって発生したキャッシュされたダーティ データを削除できるようにすることです。

もちろん、この戦略では、Redis とデータベースのマスター/スレーブ間の時間のかかる同期も考慮する必要があります。データ書き込みの最終スリープ時間: データ ビジネス ロジックの読み取りにかかる時間に数百ミリ秒が追加されます。例: 1 秒間スリープします。

3. キャッシュの有効期限を設定します

理論的には、キャッシュの有効期限を設定することは、最終的な整合性を確保するための解決策です。すべての書き込み操作はデータベースの影響を受けます。キャッシュの有効期限に達している限り、後続の読み取りリクエストは自然にデータベースから新しい値を読み取り、キャッシュをバックフィルします。

4. このプランのデメリット

二重削除戦略とキャッシュ タイムアウト設定を組み合わせると、最悪のシナリオはタイムアウト期間内にデータの一貫性がなくなり、リクエストの書き込みにかかる時間も増加します。

2. 2 番目の解決策: 非同期更新キャッシュ (binlog へのサブスクライブに基づく同期メカニズム)

1. 全体的な技術的アイデア:

MySQL binlog 増分サブスクリプション消費メッセージ キュー増分データの redis への更新

1) Redis の読み取り: ホットデータは基本的に Redis にあります

2) MySQL の作成: 追加、削除、変更はすべて MySQL 上での操作です。 3) Redis データの更新: Redis

に更新するための MySQ データ操作のバイナリログ 2.Redis の更新

1) データ操作は主に 2 つのブロックに分かれています:

1 つがいっぱいです (すべてのデータを一度に Redis に書き込みます)

1 つは増分 (リアルタイム更新)

ここで話しているのはインクリメントです。これは、mysql の変更データの更新、挿入、削除を指します。

2) バイナリログを読み取った後、それを分析し、メッセージキューを使用して各ステーションの Redis キャッシュデータをプッシュおよび更新します。

このようにして、MySQL で新しい書き込み、更新、削除などの操作が発生すると、バイナリログ関連のメッセージを Redis にプッシュでき、バイナリログ内のレコードに基づいて Redis が Redis を更新します。

実際、このメカニズムは MySQL のマスター/スレーブ バックアップ メカニズムと非常によく似ています。これは、MySQL のマスター/スレーブ バックアップも binlog を通じてデータの一貫性を実現するためです。

ここでは、canal (Alibaba のオープンソース フレームワーク) を組み合わせて使用​​し、MySQL の binlog をサブスクライブできます。Canal は、mysql のスレーブ データベースのバックアップ要求を模倣するため、Redis のデータ更新で同じ効果が得られます。

もちろん、ここでのメッセージ プッシュ ツールについては、kafka、rabbitMQ などの他のサードパーティを使用して、Redis へのプッシュ更新を実装することもできます。

以上がRedis キャッシュと MySQL データの整合性メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
MySQLのデータベースアップグレードをどのように処理しますか?MySQLのデータベースアップグレードをどのように処理しますか?Apr 30, 2025 am 12:28 AM

MySQLデータベースをアップグレードする手順には次のものがあります。1。データベースをバックアップします。2。現在のMySQLサービスを停止します。3。MySQLの新しいバージョンをインストールします。アップグレードプロセス中に互換性の問題が必要であり、Perconatoolkitなどの高度なツールをテストと最適化に使用できます。

MySQLに使用できるさまざまなバックアップ戦略は何ですか?MySQLに使用できるさまざまなバックアップ戦略は何ですか?Apr 30, 2025 am 12:28 AM

MySQLバックアップポリシーには、論理バックアップ、物理バックアップ、増分バックアップ、レプリケーションベースのバックアップ、クラウドバックアップが含まれます。 1. Logical BackupはMySqldumpを使用してデータベースの構造とデータをエクスポートします。これは、小さなデータベースとバージョンの移行に適しています。 2.物理バックアップは、データファイルをコピーすることで高速かつ包括的ですが、データベースの一貫性が必要です。 3.インクリメンタルバックアップは、バイナリロギングを使用して変更を記録します。これは、大規模なデータベースに適しています。 4.レプリケーションベースのバックアップは、サーバーからバックアップすることにより、生産システムへの影響を減らします。 5. Amazonrdsなどのクラウドバックアップは自動化ソリューションを提供しますが、コストと制御を考慮する必要があります。ポリシーを選択するときは、データベースサイズ、ダウンタイム許容度、回復時間、および回復ポイントの目標を考慮する必要があります。

MySQLクラスタリングとは何ですか?MySQLクラスタリングとは何ですか?Apr 30, 2025 am 12:28 AM

mysqlclusteringenhancesdatabaserobustnessnessnessnessnessnistandistributiondistributingdataacrossmultiplenodes.itesthendbenginefordatareplication andfaulttolerance、保証highavailability.setupinvolvesconfiguringmanagement、data、ssqlnodes、carefulmonitoringringandpe

MySQLのパフォーマンスのためにデータベーススキーマ設計を最適化するにはどうすればよいですか?MySQLのパフォーマンスのためにデータベーススキーマ設計を最適化するにはどうすればよいですか?Apr 30, 2025 am 12:27 AM

MySQLのデータベーススキーマ設計の最適化は、次の手順を通じてパフォーマンスを改善できます。1。インデックス最適化:一般的なクエリ列にインデックスを作成し、クエリのオーバーヘッドのバランスをとり、更新を挿入します。 2。テーブル構造の最適化:正規化または反通常化によりデータ冗長性を削減し、アクセス効率を改善します。 3。データ型の選択:Varcharの代わりにINTなどの適切なデータ型を使用して、ストレージスペースを削減します。 4。パーティション化とサブテーブル:大量のデータボリュームの場合、パーティション化とサブテーブルを使用してデータを分散させてクエリとメンテナンスの効率を改善します。

MySQLのパフォーマンスをどのように最適化できますか?MySQLのパフォーマンスをどのように最適化できますか?Apr 30, 2025 am 12:26 AM

tooptimizemysqlperformance、soflowthesesteps:1)properindexingtospeedupqueries、2)useexplaintoanalyzeandoptimize Queryperformance、3)AductServerContingSettingStingsinginginnodb_buffer_pool_sizeandmax_connections、4)

データ処理と計算にMySQL関数を使用する方法データ処理と計算にMySQL関数を使用する方法Apr 29, 2025 pm 04:21 PM

MySQL関数は、データ処理と計算に使用できます。 1.基本的な使用には、文字列処理、日付計算、数学操作が含まれます。 2。高度な使用法には、複数の関数を組み合わせて複雑な操作を実装することが含まれます。 3.パフォーマンスの最適化では、Where句での機能の使用を回避し、GroupByおよび一時テーブルを使用する必要があります。

MySQLにデータを挿入する効率的な方法MySQLにデータを挿入する効率的な方法Apr 29, 2025 pm 04:18 PM

MySQLでデータを挿入するための効率的な方法には、次のものが含まれます。1。insertInto ...値構文、2。LoadDatainFileコマンドの使用、3。トランザクション処理の使用、4。バッチサイズの調整、5。Insurtignoreまたは挿入の使用...

フィールドをMySQLテーブルに追加および削除する手順フィールドをMySQLテーブルに追加および削除する手順Apr 29, 2025 pm 04:15 PM

MySQLでは、AlterTabletable_nameaddcolumnnew_columnvarchar(255)afterexisting_columnを使用してフィールドを追加し、andtabletable_namedopcolumncolumn_to_dropを使用してフィールドを削除します。フィールドを追加するときは、クエリのパフォーマンスとデータ構造を最適化する場所を指定する必要があります。フィールドを削除する前に、操作が不可逆的であることを確認する必要があります。オンラインDDL、バックアップデータ、テスト環境、および低負荷期間を使用したテーブル構造の変更は、パフォーマンスの最適化とベストプラクティスです。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。