php 内存队列,memcache构建简单的内存消息队列_PHP教程
本文章來給各位同學(xué)介紹使用memcache構(gòu)建簡單的內(nèi)存消息隊(duì)列,用一個比較不錯的實(shí)例來給大家介紹,希望此方法對大家有幫助哦。
memcache功能太簡單了,只能 set get 和delete, 只能保存key-value的數(shù)據(jù), 不能保存列表。 當(dāng)然也可以把一個列表給序列化了之后存進(jìn)memcache, 但是會存在并發(fā)的問題, 每次保存數(shù)據(jù)(插隊(duì)或者出隊(duì))的時候都要給數(shù)據(jù)加鎖,在高并發(fā)的情況下很難保證數(shù)據(jù)的一致性!
但是memcache 有一個 increment 的操作,為某一個鍵對應(yīng)的值進(jìn)行加1(實(shí)際上是加法運(yùn)算, 默認(rèn)加1), 這個操作是原子性的, 所以我們可以通過這個來維護(hù)一個自增的id來保證數(shù)據(jù)的唯一。 再加上兩個指針來維護(hù)起始鍵值, 這樣就構(gòu)建了一個簡單的但相隊(duì)列!!
上代碼:
代碼如下
復(fù)制代碼
關(guān)于memcached的一些事情
內(nèi)存存儲方式(slab allocator)
memcached的數(shù)據(jù)存儲方式為slab allocator即數(shù)據(jù)分片, 在服務(wù)啟動的時候先把內(nèi)存分成不同大小的 chunk, 當(dāng)有數(shù)據(jù)過來的時候來存儲到一個合適大小的chunk當(dāng)中
之前版本是直接分配內(nèi)存, 導(dǎo)致內(nèi)存碎片 隨機(jī)查找等問題。。。
數(shù)據(jù)過期刪除機(jī)制
memcached在數(shù)據(jù)過期之后,并不會去刪除數(shù)據(jù), 但是不能訪問過期的數(shù)據(jù), 過期數(shù)據(jù)占用的空間會被重復(fù)利用
memcached采用lazy expiration.不會去主動掃描一個數(shù)據(jù)項(xiàng)是否過期, 而是在數(shù)據(jù)get的時候判斷是否已經(jīng)過期.
刪除的算法是LRU(Least Recently Used) , 優(yōu)先刪除最近使用較少的數(shù)據(jù)
memcached的分布式機(jī)制
雖說memcached是一個分布式的緩存, 但是memcached本身并沒有實(shí)現(xiàn)任何分布式的機(jī)制, 分布式的功能主要是由客戶端來實(shí)現(xiàn)的。
程序通過addserver增加多個memcahced服務(wù)到客戶端(memcache擴(kuò)展), 在存取數(shù)據(jù)之前,客戶端會先通過hash算法得到存儲數(shù)據(jù)的節(jié)點(diǎn), 然后再去存取數(shù)據(jù), 當(dāng)其中一臺memcached服務(wù)器掛掉或者新增一臺memcached服務(wù)器, hash算法得到的存儲數(shù)據(jù)的節(jié)點(diǎn)就會變化, 去新的服務(wù)器上去存取數(shù)據(jù)。
http://www.bkjia.com/PHPjc/632905.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/632905.htmlTechArticle本文章來給各位同學(xué)介紹使用memcache構(gòu)建簡單的內(nèi)存消息隊(duì)列,用一個比較不錯的實(shí)例來給大家介紹,希望此方法對大家有幫助哦。 memcache功...
總結(jié)
以上是生活随笔為你收集整理的php 内存队列,memcache构建简单的内存消息队列_PHP教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt关闭程序的时候创建json文件,再次
- 下一篇: 智能机器人建房子后房价走势_深圳建二手房