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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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