目錄
回复讨论(解决方案)
首頁 後端開發 php教程 php memcached的高并发处理队列实现问题

php memcached的高并发处理队列实现问题

Jun 23, 2016 pm 01:39 PM

       刚看了memcached处理抢购问题的队列的一些代码,我理解到的思路有两种

      1.使用 $mem->set(LOCK_key,1) 来加锁,入队结束后 $mem->delete(LOCK_key) 解锁

      2.使用memcached 的 increment(key,1) 来获得队列位置

     我的问题是: 
    1.第一种方法可行吗?
     2.$memcached->increment(key,1)  这个函数能处理并发访问吗?也就是多个进程同时调用 increment函数,会不会发生并发覆盖问题?

    我今年大四了,在不断找工作中,由于之前学习的不够系统的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#what's the big benefit for all this),也就是说无论多少个操作,你丢到memcached服务器里,都是顺序执行的,所以方法2是可行的。我同样用800个客户端,每个客户端访问10次,最后查看increment的值,正好是8000,所以不会覆盖。

无独有偶,我也是今年大四连续被4399,YY等公司刷掉了。
痛定思痛,从工作中慢慢重新学习吧

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

http://redis.io/

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP教程
1596
276
PHP中的對象關聯映射(ORM)性能調整 PHP中的對象關聯映射(ORM)性能調整 Jul 29, 2025 am 05:00 AM

避免N 1查詢問題,通過提前加載關聯數據來減少數據庫查詢次數;2.僅選擇所需字段,避免加載完整實體以節省內存和帶寬;3.合理使用緩存策略,如Doctrine的二級緩存或Redis緩存高頻查詢結果;4.優化實體生命週期,定期調用clear()釋放內存以防止內存溢出;5.確保數據庫索引存在並分析生成的SQL語句以避免低效查詢;6.在無需跟踪變更的場景下禁用自動變更跟踪,改用數組或輕量模式提升性能。正確使用ORM需結合SQL監控、緩存、批量處理和適當優化,在保持開發效率的同時確保應用性能。

在PHP中構建不變的物體,並具有可讀的屬性 在PHP中構建不變的物體,並具有可讀的屬性 Jul 30, 2025 am 05:40 AM

ReadonlypropertiesinPHP8.2canonlybeassignedonceintheconstructororatdeclarationandcannotbemodifiedafterward,enforcingimmutabilityatthelanguagelevel.2.Toachievedeepimmutability,wrapmutabletypeslikearraysinArrayObjectorusecustomimmutablecollectionssucha

無服務器革命:使用BREF部署可擴展的PHP應用程序 無服務器革命:使用BREF部署可擴展的PHP應用程序 Jul 28, 2025 am 04:39 AM

Bref使PHP開發者能無需管理服務器即可構建可擴展、成本高效的應用。 1.Bref通過提供優化的PHP運行時層,將PHP帶入AWSLambda,支持PHP8.3等版本,並與Laravel、Symfony等框架無縫集成;2.部署步驟包括:使用Composer安裝Bref,配置serverless.yml定義函數和事件,如HTTP端點和Artisan命令;3.執行serverlessdeploy命令即可完成部署,自動配置APIGateway並生成訪問URL;4.針對Lambda限制,Bref提供解決

深入了解PHP的內部垃圾收集機制 深入了解PHP的內部垃圾收集機制 Jul 28, 2025 am 04:44 AM

PHP的垃圾回收機制基於引用計數,但循環引用需靠週期性運行的循環垃圾回收器處理;1.引用計數在變量無引用時立即釋放內存;2.循環引用導致內存無法自動釋放,需依賴GC檢測並清理;3.GC在“可能根”zval達閾值或手動調用gc_collect_cycles()時觸發;4.長期運行的PHP應用應監控gc_status()、適時調用gc_collect_cycles()以避免內存洩漏;5.最佳實踐包括避免循環引用、使用gc_disable()優化性能關鍵區及通過ORM的clear()方法解引用對象,最

將PHP與機器學習模型集成 將PHP與機器學習模型集成 Jul 28, 2025 am 04:37 AM

usearestapitobridgephpandmlmodelsbyrunningthemodelinpythonviaflaskorfastapiandcallingitfromphpusingcurlorguzzle.2.runpythonscriptsdirectsdirectlyectlyectlyfromphpsingexec()orshell_exec()orshell_exec()orshell_exec()

處理加密貨幣計算:為什麼BCMATH在PHP中至關重要 處理加密貨幣計算:為什麼BCMATH在PHP中至關重要 Aug 01, 2025 am 07:48 AM

bcmathisesene forAccratecryptoCurrencyCalcalsionSinphpBecausefloing-pointarithmeticIntroducesunAcceptablebablerOundingErrors.1.floation-pointnumberslike0.1 0.2yieldimimpreciseresults(e.g.,e.g.,0.30000000000000000000004)

字符串作為價值對象:一種現代的特定領域字符串類型的方法 字符串作為價值對象:一種現代的特定領域字符串類型的方法 Aug 01, 2025 am 07:48 AM

Rawstringsindomain-drivenapplicationsshouldbereplacedwithvalueobjectstopreventbugsandimprovetypesafety;1.Usingrawstringsleadstoprimitiveobsession,whereinterchangeablestringtypescancausesubtlebugslikeargumentswapping;2.ValueobjectssuchasEmailAddressen

了解PHP引擎中的恆定表達評估 了解PHP引擎中的恆定表達評估 Jul 29, 2025 am 05:02 AM

PhpeValuatesConstantExpressatAtcompiletimetoetimetoemetotocreveranceandearlyerrordetection.1.ConstantExpressepressevaluationMeanScomputingValuesDuruesduresduresduring-CompiLation -whenalloperandSareSareSareConconstantSareConconstantsLikeLiterals,classConstants,classConstants,classConstants,orpredefendinedconcontantstants.2.phpp'2.php’2.php’2.2.php’2.php’2.php’2.php’2.php’2.php’sse

See all articles