PHPer はトランザクションについて多かれ少なかれ知っていると思いますが、トランザクションはいくつかのシナリオでよく使用されます。たとえば、製品を購入する場合、注文テーブルにデータを挿入したり、ユーザー テーブルの残高フィールドを変更したりする必要があります。これら 2 つの操作は同時に成功するか、両方とも失敗する必要があります。そうしないと、データの不整合が発生します。
Redis はトランザクション機能もサポートしています。従来のリレーショナル データベースのトランザクション機能ほど強力ではありませんが、使い方は非常に簡単です。
#トランザクション
MULTI
multi はトランザクションの開始を示します。後続の命令は、EXEC の実行時にアトミックとして実行されます。DISCARD
Discard コマンドは、トランザクションをキャンセルし、トランザクション ブロック内のすべてのコマンドの実行を放棄するために使用されます。EXEC
exec コマンドは、すべてのトランザクション ブロック内でコマンドを実行するために使用されます上記の 3 つのコマンドを導入した後、小さな関数を完成させましょう。ユーザーの注意: たとえば、ユーザー A が B をフォローする場合、B を A のフォロー リストに追加し、A を B のファン リストに追加する必要があります。これら 2 つの操作はアトムとして実行する必要があります。 実装コードは次のとおりです:$redis->multi() ->sadd('like:A', 'B') ->sadd('fans:B', 'A') ->exec();
楽観的ロック
まず、楽観的ロックとは何か、およびそれに対応する悲観的ロックについて紹介します。 悲観的なロック: 私の考えは非常に悲観的です。彼氏のことがよくわかりません。彼氏と一緒にいる限り、誰も彼氏に触れることはできません。 Mysql の行ロック、テーブル ロックなどはすべて悲観的ロックです。 楽観的なロック: 彼女はとても楽観的で純朴です。彼女は彼氏を信頼しています。彼女が彼氏と一緒にいて、他の友達が彼氏とチャットしているとき、彼女は彼女を止めません。しかし、二人が一緒にいるたびに、彼女は彼氏の近況を評価し、何か問題があるかどうかを判断します。問題がなければこれからも彼と一緒にいますが、そうでなければ別れます。 以下のシナリオがあります: Redis はトークンを保存しますが、このトークンは一定期間後に更新する必要があります。ペシミスティック ロックでは、変更する前にロックする必要があります。現時点では、他のリクエストは変更できません。変更が完了するまでロックは解除されません。楽観的ロックのアプローチは、変更時にロックは行わないが、変更前の状態を観察します。変更されていない場合は変更します。状態が変化している場合は、変更は行いません。 。 ,Redis でオプティミスティック ロックを使用するにはどうすればよいですか? Redis は、トランザクション内で条件付きで監視および実行される指定されたすべてのキーをマークするコマンド Watch を提供します。 以下は疑似コードです:$redis->watch('token'); $redis->multi() ->set('token','sfwefawfwefa323') ->exec();
以上がRedis トランザクションと楽観的ロックの適用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。