ホームページ  >  記事  >  バックエンド開発  >  php memcached の高同時処理キューの実装の問題

php memcached の高同時処理キューの実装の問題

WBOY
WBOYオリジナル
2016-06-23 13:39:061189ブラウズ

C 購入の問題に対処するためのキューのコードをいくつか見たところ、2 つのタイプの考え方があることがわかりました。立場


私の質問は次のとおりです:
1. 最初の方法は実行可能ですか?
2.$memcached->increment(key,1) この関数は同時アクセスを処理できますか?つまり、複数のプロセスが同時にインクリメント関数を呼び出した場合、同時カバレッジの問題は発生しますか?

私は今年大学4年生で、常に就職活動をしているのですが、PHPの体系的な学習が足りなかったため、再試験でYYと4399の両方に不合格となりました。
心很凉、找工作不易、行および珍惜し、我要好好加油、谢谢各位大牛拉我一握


回复讨论(解决方案)

会発行冲突

你自己拜试一下就知道

memcached のみを使用すると、競合が発生します。同時実行性が高い場合は、memcacheQ を使用して競合を解決できます。
memcacheq は、キュー内のデータにアクセスする、同時実行性の問題を解決するために特別に開発されたミドルウェアです。

参考: http://blog.csdn.net/fdipzone/article/details/17933673

1. 最初の方法は可能ですが、ロック効率が低すぎ、複数のクライアントアクセスがロック解除を待っているため、速度が低下します非常に遅いです (私のテストによると、800 クライアント、各クライアントが 10 回アクセスし、200 のキューがいっぱいになり、32 秒かかりました)。
このキューの実装方法はマスターによってgithubに投稿されています

https://github.com/meetrajesh/php-memqueue/blob/master/memqueue.php

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/

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHP で遊ぶ次の記事:PHP で遊ぶ