現在、インターネットでは Redis が広く使われています。その用途はビジネスによって異なります。しかし、一般に、データの保存とキャッシュの一貫性に問題があります。ここでは、成熟した実用的なソリューションをいくつか紹介します。
方法 1:
データベースはデータを保存しますが、redis は永続化されません。redis が起動した後、データベースからデータを読み込みます。データベースは必要ありません 強い一貫性とリアルタイム パフォーマンスを必要とする読み取りリクエストは redis によって処理されます 強い一貫性とリアルタイム パフォーマンスが必要な読み取りリクエストはデータベースによって処理されます 書き込みリクエストには 2 つの処理方法があり、どちらも処理されます(推奨学習: Redis ビデオ チュートリアル )
アプリケーションは最初にデータベースに書き込み、次に redis を更新します
アプリケーションは最初にデータベースに書き込み、そしてその後、他のデーモンが redis に同期します
利点: redis の起動では、redis データとデータベース間の不一致に対処する必要がありません
欠点: redis の起動により、データベースに多大な読み取り圧力がかかります
方法 2:
データベースと Redis はそれぞれ異なるデータ型を処理します。データベース処理要件財務データやトランザクション データなど、強力な一貫性とリアルタイム性を持つデータ、Redis Web サイトで最も人気のある投稿のランキングなど、強力な一貫性とリアルタイム性を必要としないデータを処理します。
Redis と MySQL データの同期のコード レベルは、およそ次のようになります。読み取り: redis の読み取り -> いいえ、mysql の読み取り -> mysql データを redis に書き込みます 書き込み: mysql の書き込み -> 成功、redis の書き込み
同時実行性が高くありません: 読み取り: redis の読み取り - > いいえ、mysql の読み取り->mysql データを redis に書き込みます (存在する場合)、redis から直接取得します;書き込み: mysql の書き込み->成功し、次に redis に書き込みます;
同時実行性が高い状況: 読み取り: redis を読み取る -> いいえ、mysql を読み取ります -> mysql データを redis に書き込みます (存在する場合は、redis から直接取得します。書き込み: 非同期の場合は、最初に redis キャッシュに書き込んでから直接返します。通常)データは mysql に保存され、複数回更新して 1 回保存できます;
--注: Redis を作成する場合は、redis トランザクションを使用する必要があります:
127.0.0.1:6379> WATCH id OK 127.0.0.1:6379> MULTI OK 127.0.0.1:6379> INCR id QUEUED 127.0.0.1:6379> EXEC 1) (integer) 342183 127.0.0.1:6379>
方法 3:
lua スクリプトを使用する: redis では、lua を使用する場合、同時に実行できるスクリプトは 1 つだけです。これは、
EVAL
EVAL コマンドは、Lua スクリプトを実行して評価します。
文法:
EVAL script numkeys key [key …] arg [arg …]
script lua脚本内容 注意的是脚本不应该是Lua函数。 numkeys 表示指定键名参数的个数。 key [key ...] 表示脚本对应的key值列表 在脚本中可以使用KEYS[1] KEYS[2] KEYS[3]KEYS[n] n从1开始 。 arg [arg ...] 命名行中传递的参数列表 在脚本中可以使用ARGV[1] ARGV[2] ARGV[3]ARGV[n] n从1开始 。
例は百聞は一見に如かずの説明です
eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 id name 3 mytest
上記のスクリプトを実行して
1) "id"2) "name" 3) "2" 4) "mytest"
Redis 関連の技術記事の詳細については、Redis 入門チュートリアル 列にアクセスして学習してください。
以上がRedis がデータの一貫性を保証する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。