ホームページ >バックエンド開発 >PHPチュートリアル >php memcached の高同時処理キューの実装の問題
C 購入の問題に対処するためのキューのコードをいくつか見たところ、2 つのタイプの考え方があることがわかりました。立場
私の質問は次のとおりです:
1. 最初の方法は実行可能ですか?
2.$memcached->increment(key,1) この関数は同時アクセスを処理できますか?つまり、複数のプロセスが同時にインクリメント関数を呼び出した場合、同時カバレッジの問題は発生しますか?
私は今年大学4年生で、常に就職活動をしているのですが、PHPの体系的な学習が足りなかったため、再試験でYYと4399の両方に不合格となりました。
心很凉、找工作不易、行および珍惜し、我要好好加油、谢谢各位大牛拉我一握
回复讨论(解决方案)
会発行冲突
你自己拜试一下就知道
memcached のみを使用すると、競合が発生します。同時実行性が高い場合は、memcacheQ を使用して競合を解決できます。 1. 最初の方法は可能ですが、ロック効率が低すぎ、複数のクライアントアクセスがロック解除を待っているため、速度が低下します非常に遅いです (私のテストによると、800 クライアント、各クライアントが 10 回アクセスし、200 のキューがいっぱいになり、32 秒かかりました)。
このキューの実装方法はマスターによってgithubに投稿されています
95行目だけです while ($this-> memc ->add($this->lock_key, '1', 0, 2)) while を追加する必要があります。
2. memcached のすべての操作はアトミックです (get/set/increment、http://blog.csdn.net/jarfield/article/details/4336035#これすべての大きな利点を参照してください)。つまり、次のようになります。 memcached サーバーにどれだけ多くの操作を投入しても、それらはすべて順番に実行されるため、方法 2 が実行可能です。また、800 個のクライアントを使用し、各クライアントが 10 回訪問したところ、増分値はちょうど 8000 だったので上書きされませんでした。
偶然ですが、私も今年4年生で4399、YY、その他の企業に不採用になりました。
痛みから学び、ゆっくりと仕事から学び直しましょう
言い忘れましたが、キュー サービスには Redis を使用することが推奨されており、キューのさまざまな操作があり、そのパフォーマンスはサーバー側での memcached のロックよりもはるかに優れています。
http://redis.io/