incr
たとえば、北京のナンバー プレートでは、最初に取得してから資格を承認するプロセスが採用されています。ナンバー プレート プールには N 個の番号があり、ページは 1 ページあたり 10 個の項目で表示されます。各番号の後に取得ボタンがあり、1 人が 1 つのナンバー プレートのみ取得でき、同じナンバー プレートを取得できるのは 1 人だけです。一人。ビジネス モデル リファレンス (http://num.10010.com/NumApp/chseNumList/init?num=186)
if ($this->redis_db->incr("bj_".$car_no) != 1) { 让别人先下手了,点别的去~ }else{ //抢到竞态条件,如果不复核资质要求退出,并清除incr if(抢到了但是没资质等){ 释放对此id的竟态权,别占茅坑 $this->yredis_db->del("bj_".$id); }else{ 其他业务A 抱得号码归... 其他业务B } }
さらに、 incr
string
型、hash
型、sortedSet
型
blpop
で操作可能blpop
lpop に対する利点の 1 つは、複数のキューに対して優先操作を実行できることです。 blpop
は key
の順序に従って順にポップアップされ、戻り値はリスト名と key
の特定の要素の値、および ## です#block# を設定できます。## 時間、原則は最初にブロックし、最初にサーブすることです。<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"> $date = date('Ymd', time());
//左进左出 ,优先分配一般的车牌号码,然后在分配非常好的连号号码,设置一个阻塞时间
return $this->redis->blpop(self::$_config['dispatch_normal_list'] . $date, self::$_config['dispatch_better_list'] . $date, self::$_config['redis_block_l_pop_time_out']);</pre><div class="contentsignin">ログイン後にコピー</div></div>
hsetnx
を ハッシュ# に設定します## を指定された
value に変換します (
field が存在しない場合)。存在する場合は 0 を返します。
これにより、1 人が 1 つのナンバー プレートしか取得できないことが保証されますが、支払いやその他の業務を実行するためにナンバー プレートを取得するプロセス中、他の人はこれを行うことができません (つまり、このナンバー プレートを他の人に拘束することはできません) )。特定のビジネス状況に応じて、car_no に基づくハッシュ フィールドと人物に基づくハッシュ フィールドを設定できます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">hash_base_people {"zhangsan":"京A888","lisi":"京A999"}
hash_base_car_no {"京A888":"zhangsan","京A999":"lisi"}</pre><div class="contentsignin">ログイン後にコピー</div></div>
これら 2 つのハッシュに基づいて、hget による特定のバインディング関係の確認など、より多くのビジネス関連の操作を実行できます。
//删除以people_id为key的hash
$base_people_id_del = $this->redis->hdel(self::$_config['hash_base_people'], $people_id);
//删除以car_no为key的hash
$base_car_no_del = $this->redis->hdel(self::$_config['hash_base_car_no'], $clue_id);
ログイン後にコピー
lpush入口がある場合は、北京でスナップできるナンバー プレートをリストに入れます//删除以people_id为key的hash $base_people_id_del = $this->redis->hdel(self::$_config['hash_base_people'], $people_id); //删除以car_no为key的hash $base_car_no_del = $this->redis->hdel(self::$_config['hash_base_car_no'], $clue_id);
$lpush_res = $redisObj->lpush($list_name, $car_no);
ログイン後にコピー
list_name の値は、 car_no の特定の値。たとえば、6 と 8 がある場合、それらを $lpush_res = $redisObj->lpush($list_name, $car_no);
better_car_no
リストに入れ、その他をnormal_car_no リストに入れます。最後に # を使用できます。 ##blpop
シーケンスを指定します。 rpoplpush
セーフキューポップアップモード、例えばN人が入口ボタンを操作する リスト構造に十分なデータがあれば、各人が持つのは1つだけデータを受信しますので、受信後に他の業務を行ってください。
lpop
を使用した後、元のキューがポップされていることです。クライアントが途中で、この要素の処理が完了する前にpop
要素を取得した場合、クライアントがクラッシュしました。この時点で、メッセージはどこからともなく消えました。厳密な要件を必要とする他の補足的な手段 (ポップアップ要素のバインドや記録など) がない場合は、rpopplus
h を使用してこの問題を解決できます。クライアントが実際に pop
要素を処理した後、このメッセージは lrem
を通じて安全に削除されます。 推奨される調査: 「
redis ビデオ チュートリアル