ホームページ > データベース > Redis > Redis がデータの一貫性を保証する方法

Redis がデータの一貫性を保証する方法

(*-*)浩
リリース: 2019-11-28 09:56:20
オリジナル
16231 人が閲覧しました

現在、インターネットでは Redis が広く使われています。その用途はビジネスによって異なります。しかし、一般に、データの保存とキャッシュの一貫性に問題があります。ここでは、成熟した実用的なソリューションをいくつか紹介します。

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート