解决方案 »

  1.   

    只用memcached你这样会冲突的,对于高并发冲突,可使用memcacheQ来解决。
    memcacheq 是专为门为解决高并发问题所开发的中间件,以队列的方式存取数据。
    参考:http://blog.csdn.net/fdipzone/article/details/17933673
      

  2.   

    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#what's the big benefit for all this),也就是说无论多少个操作,你丢到memcached服务器里,都是顺序执行的,所以方法2是可行的。我同样用800个客户端,每个客户端访问10次,最后查看increment的值,正好是8000,所以不会覆盖。无独有偶,我也是今年大四连续被4399,YY等公司刷掉了。
    痛定思痛,从工作中慢慢重新学习吧
      

  3.   

    忘了说了,队列服务,建议用 redis 吧,他自带队列的各种操作,性能比memcached的在服务端加锁要好很多。http://redis.io/