用memcache實現簡單的先進先出佇列

2021-06-28 09:33:44 字數 1613 閱讀 8692

本**根據前輩的**簡化修改而成

class memcachequeue

private function _initsetheadntail()

/*** 當新增元素時,改變佇列尾的數值

* @param int $step 步長值

* @param bool $reverse 是否反向

* @return null

*/private function _changetail($step=1, $reverse =false)else

memcache_set($this->client, $this.queuename.$this->tail_key,$currenttail,false);

} /**

* 佇列是否為空

* @return bool

*/public function _isempty()

private function _getlock()

} return true;

} private function _unlock()

/*** 獲取當前佇列的長度

* 該長度為理論長度,某些元素由於過期失效而丟失,真實長度<=該長度

* @return int

*/public function getqueuelength()

/*** 新增佇列資料

* @param void $data 要新增的資料

* @return bool

*/public function add($data)

$this->_unlock();

return $result;

} /**

* 取出佇列資料

* @param int $length 要取出的長度(反向讀取使用負數)

* @return array

*/public function get()

$currenthead=memcache_get($this->client,$this->head_key);

$currenthead+=1;

memcache_set($this->client,$this->head_key,$currenthead);

$this->_unlock();//設定完佇列長度後就可以解鎖了

$valuekey=$this->queuename.self::value_key.$currenthead;

$result=memcache_get($this->client,$valuekey);

memcache_delete($this->client, $valuekey, 0);

return $result;

} /**

*重置佇列值過期時間

*/ public function resetvalueexpiretime($key,$value)

/* * 清除所有memcache快取資料

*/public function memflush()

public function getqueuename()

public function getexpire()

}

PHP下用Memcache 實現訊息佇列

memcache 一般用於快取服務。但是很多時候,比如乙個訊息廣播系統,需要乙個訊息佇列。直接從資料庫取訊息,負載往往不行。如果將整個訊息佇列用乙個key快取到memcache裡面,對於乙個很大的訊息佇列,頻繁進行進行大資料庫的序列化 和 反序列化,有太耗費。下面是我用php 實現的乙個訊息佇列,只...

memcache的簡單使用示例

在實際應用中我們會快取從資料庫中查出來的結果集,以md5 sql 為 key,結果集為值。以只是在php簡單應用 建立memcache鏈結 memcache new memcache memcache connect 127.0.0.1 11211 新增資料 memcache add name 王召...

用CHttpFile實現簡單的GET POST資料

afxmessagebox 不能找到網頁檔案!sess.close 二 post 資料,比如用於上報,提交資訊等 cstring strhttpname http localhost testreg regform.aspx 需要提交資料的頁面 cstring strformdata usernam...