//a,b两个请求并发 注册相同用户名 username='myname'$is_user = "SELECT username FROM users WHERE username='myname'";if(!$is_user){ echo ("INSERT INTO users (username) VALUES ('myname')");}
データベース ロック操作
データベース ロック操作
読み取りロックが共有されているようで、全員が同時に読み取ることができるため、エラー結果が発生しました。
一意のキーを追加してみませんか?
最も簡単な方法は、一意のキーをデータベースに追加することです
もう少し複雑です:
単一の Web マシンがローカル ファイル ロック flock、1 つのユーザー名、1 つのローカル ファイルを使用します
複数のマシンが memcache inc を使用してロック メカニズムを実装しますhttp://ju.outofmemory.cn/entry/48924
わかりました、ありがとうございます。
一意のインデックスではない場合にこの問題を解決する方法を時々考えるだけでした。
最も簡単な方法は、一意のキーをデータベースに追加することです
もう少し複雑です:
単一の Web マシンがローカル ファイル ロック flock、1 つのユーザー名、1 つのローカル ファイルを使用します
複数のマシンが memcache inc を使用してロック メカニズムを実装しますhttp://ju.outofmemory.cn/entry/48924
memcache についてもう一度質問します。
$v = $memcache->get ( $key );
if ($v === false) {
$memcache->set ( $key, 0 ) }
$index = $memcache- >increment ($key, 1);
2 つの同時リクエスト a と b get($key) は、set($key) と b set($key) によって上書きされますか?後者