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

Redis キャッシュと MySQL データの整合性メソッド

May 29, 2023 pm 08:17 PM
mysql redis

需要の原因

同時実行性の高いビジネス シナリオでは、ほとんどの場合、データベースが同時ユーザー アクセスにとって最も弱いリンクとなります。したがって、リクエストが 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 までご連絡ください。

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Redisクラスターモードの構築方法 Redisクラスターモードの構築方法 Apr 10, 2025 pm 10:15 PM

Redisクラスターモードは、シャードを介してRedisインスタンスを複数のサーバーに展開し、スケーラビリティと可用性を向上させます。構造の手順は次のとおりです。異なるポートで奇妙なRedisインスタンスを作成します。 3つのセンチネルインスタンスを作成し、Redisインスタンスを監視し、フェールオーバーを監視します。 Sentinel構成ファイルを構成し、Redisインスタンス情報とフェールオーバー設定の監視を追加します。 Redisインスタンス構成ファイルを構成し、クラスターモードを有効にし、クラスター情報ファイルパスを指定します。各Redisインスタンスの情報を含むnodes.confファイルを作成します。クラスターを起動し、CREATEコマンドを実行してクラスターを作成し、レプリカの数を指定します。クラスターにログインしてクラスター情報コマンドを実行して、クラスターステータスを確認します。作る

基礎となるRedisを実装する方法 基礎となるRedisを実装する方法 Apr 10, 2025 pm 07:21 PM

Redisはハッシュテーブルを使用してデータを保存し、文字列、リスト、ハッシュテーブル、コレクション、注文コレクションなどのデータ構造をサポートします。 Redisは、スナップショット(RDB)を介してデータを維持し、書き込み専用(AOF)メカニズムを追加します。 Redisは、マスタースレーブレプリケーションを使用して、データの可用性を向上させます。 Redisは、シングルスレッドイベントループを使用して接続とコマンドを処理して、データの原子性と一貫性を確保します。 Redisは、キーの有効期限を設定し、怠zyな削除メカニズムを使用して有効期限キーを削除します。

Redisのすべてのキーを表示する方法 Redisのすべてのキーを表示する方法 Apr 10, 2025 pm 07:15 PM

Redisのすべてのキーを表示するには、3つの方法があります。キーコマンドを使用して、指定されたパターンに一致するすべてのキーを返します。スキャンコマンドを使用してキーを繰り返し、キーのセットを返します。情報コマンドを使用して、キーの総数を取得します。

phpmyAdminの脆弱性の概要 phpmyAdminの脆弱性の概要 Apr 10, 2025 pm 10:24 PM

PHPMyAdminセキュリティ防衛戦略の鍵は次のとおりです。1。PHPMyAdminの最新バージョンを使用し、PHPとMySQLを定期的に更新します。 2.アクセス権を厳密に制御し、.htaccessまたはWebサーバーアクセス制御を使用します。 3.強力なパスワードと2要素認証を有効にします。 4.データベースを定期的にバックアップします。 5.機密情報が公開されないように、構成ファイルを慎重に確認します。 6。Webアプリケーションファイアウォール(WAF)を使用します。 7.セキュリティ監査を実行します。 これらの測定は、不適切な構成、古いバージョン、または環境セキュリティのリスクにより、PHPMyAdminによって引き起こされるセキュリティリスクを効果的に削減し、データベースのセキュリティを確保することができます。

phpmyAdminの包括的な使用ガイド phpmyAdminの包括的な使用ガイド Apr 10, 2025 pm 10:42 PM

PHPMyAdminは単なるデータベース管理ツールではなく、MySQLを深く理解し、プログラミングスキルを向上させることができます。コア関数には、CRUDおよびSQLクエリの実行が含まれ、SQLステートメントの原則を理解することが重要です。高度なヒントには、データのエクスポート/インポートと許可管理が含まれ、深いセキュリティの理解が必要です。潜在的な問題にはSQLインジェクションが含まれ、ソリューションはパラメーター化されたクエリとバックアップです。パフォーマンスの最適化には、SQLステートメントの最適化とインデックスの使用が含まれます。ベストプラクティスは、コード仕様、セキュリティプラクティス、および定期的なバックアップを強調しています。

phpmyadminを開く方法 phpmyadminを開く方法 Apr 10, 2025 pm 10:51 PM

次の手順でphpmyadminを開くことができます。1。ウェブサイトコントロールパネルにログインします。 2。phpmyadminアイコンを見つけてクリックします。 3。MySQL資格情報を入力します。 4.「ログイン」をクリックします。

Redis Zsetの使用方法 Redis Zsetの使用方法 Apr 10, 2025 pm 07:27 PM

Redis Orderedセット(ZSET)は、並べ替えられた要素を保存し、関連するスコアでソートするために使用されます。 zsetを使用する手順には次のものがあります。1。zsetを作成します。 2。メンバーを追加します。 3.メンバースコアを取得します。 4。ランキングを取得します。 5.ランキング範囲のメンバーを取得します。 6.メンバーを削除します。 7.要素の数を取得します。 8。スコア範囲のメンバーの数を取得します。

Redisのソースコードを読み取る方法 Redisのソースコードを読み取る方法 Apr 10, 2025 pm 08:27 PM

Redisソースコードを理解する最良の方法は、段階的に進むことです。Redisの基本に精通してください。開始点として特定のモジュールまたは機能を選択します。モジュールまたは機能のエントリポイントから始めて、行ごとにコードを表示します。関数コールチェーンを介してコードを表示します。 Redisが使用する基礎となるデータ構造に精通してください。 Redisが使用するアルゴリズムを特定します。

See all articles