使用memcache和redis實現佇列

2021-08-07 16:39:14 字數 2327 閱讀 4572

佇列的基本功能是:壓入和彈出,先進先出。

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 是多麼好用,這篇寫個那些剛剛使用...