佇列的基本功能是:壓入和彈出,先進先出。
memcache的實現方式
使用memcache實現佇列,需要使用兩個key來標記佇列的狀態:pushkey 記錄壓入佇列的總數,popkey記錄彈出佇列的總數。
壓入資料:pushkey初始值為0,每壓入佇列乙個資料的時候,pushkey自增1。
彈出資料:popkey初始值為0,每從佇列中彈出乙個資料的時候,popkey自增1。同時刪除佇列彈出資料的時候,從小標0開始,實現了先進先出的特點。彈出資料的實質是:獲取這個資料,然後在把這個資料從佇列中刪除。
佇列初始化**
[php]view plain
copy
public
function
__construct(
$queue
, array
$config
)
// 連線例項
$this
->_memcache =
newcom_cache_memcache();
// 初始化鍵名
$this
->_pushedcountkey =
'queue:'
. strtoupper
($queue
) .
':pushedcount'
; // 已壓進元素數
$this
->_popedcountkey =
'queue:'
. strtoupper
($queue
) .
':popedcount'
; // 已彈出元素數
$this
->_queuedatakey =
'queue:'
. strtoupper
($queue
) .
':data'
;
// 佇列資料字首
}
push資料
[php]view plain
copy
public
function
push(
$value
)
$pushed
= intval
($this
->_memcache->get(
$this
->_pushedcountkey));
// 壓進
$key
= $this
->_queuedatakey .
':'.
$pushed
; if
(! $this
->_memcache->set(
$key
, $value
))
// 累加已壓進了幾個元素
if(!
$this
->_memcache->increment(
$this
->_pushedcountkey))
return
true;
}
pop資料:
[php]view plain
copy
public
function
pop()
// 從佇列中刪除此資料
$this
->_memcache->
delete
($key
);
// 累加彈出了幾個元素
if(!
$this
->_memcache->increment(
$this
->_popedcountkey))
return
$value
; }
redis實現
redis提供了列表,可以很容易的實現佇列,主要需要的函式有:
rpush($value) : 向佇列中壓入乙個資料
lpop($value): 彈出乙個資料
佇列的使用範圍
需要非同步處理的時候,使用佇列,可以縮短響應時間,比如網頁發簡訊,可以把需要傳送的簡訊儲存在佇列中,然後直接提示玩家簡訊傳送成功,其實,這個時候簡訊可能還沒有傳送出去,傳送簡訊的伺服器再讀取這個佇列,然後傳送簡訊。所以提示玩家簡訊傳送成功和傳送簡訊是非同步處理的
Memcache 配置和使用
1,ubuntu下配置 memcached 2,memcache使用方法 1 安裝memcache客戶端 php5為示例 sudo apt get install php5 memcache 安裝完以後我們需要在php.ini裡進行簡單的配置,開啟 etc php5 apache2 php.ini檔...
使用jedisCluster操作Redis集群
第一步 建立乙個jedis物件。需要指定服務端的ip及埠。第二步 使用jedis物件運算元據庫,每個redis命令對應乙個方法。第三步 列印結果。第四步 關閉jedis test public void testjedis throws exception第一步 建立乙個jedispool物件。需要...
小白談memcache和memcached的區別
用了段時間的memcache和memcached總結下認識,看很多人在用cache的時候,剛剛都沒有搞清楚memcache和memcached的區別,還有就是使用的時候基本都是 get set 用了memcached之後其實可以發現getmulti setmulti 是多麼好用,這篇寫個那些剛剛使用...