Kürzlich habe ich eine Flash-Sale-Veranstaltung durchgeführt und aus Gründen der Leistung und Reaktionsgeschwindigkeit habe ich Redis verwendet. Beim Schreiben habe ich besonders darauf geachtet, übernatürliche Phänomene zu verhindern. Ich habe die optimistische Sperre (Cas) verwendet, die auf der Redis-Theorie basiert. Ich dachte, dass dieses Problem behoben werden sollte, aber es trat immer noch auf und um Hilfe gebeten. Der spezifische Code lautet ungefähr wie folgt:
<code><?php header("content-type:text/html;charset=utf-8"); $redis = new redis(); $result = $redis->connect('10.10.10.119', 6379); $mywatchkey = $redis->get("mywatchkey"); $rob_total = 100; //抢购数量 if($mywatchkey<$rob_total){ $redis->watch("mywatchkey"); $redis->multi(); //设置延迟,方便测试效果。 sleep(5); //插入抢购数据 $redis->hSet("mywatchlist","user_id_".mt_rand(1, 9999),time()); $redis->set("mywatchkey",$mywatchkey+1); $rob_result = $redis->exec(); if($rob_result){ $mywatchlist = $redis->hGetAll("mywatchlist"); echo "抢购成功!<br/>"; echo "剩余数量:".($rob_total-$mywatchkey-1)."<br/>"; echo "用户列表:<pre class="brush:php;toolbar:false">"; var_dump($mywatchlist); }else{ echo "手气不好,再抢购!";exit; } } ?> </code>