Memcache 中實現訊息佇列

2022-03-06 06:53:42 字數 3318 閱讀 3615

memcache 一般用於快取服務。但是很多時候,比如乙個訊息廣播系統,需要乙個訊息佇列。直接從資料庫取訊息,負載往往不行。如果將整個訊息佇列用乙個key快取到memcache裡面,

對於乙個很大的訊息佇列,頻繁進行進行大資料庫的序列化 和 反序列化,有太耗費。下面是我用php 實現的乙個訊息佇列,只需要在尾部插入乙個資料,就操作尾部,不用操作整個訊息佇列進行讀取,與操作。但是,這個訊息佇列不是執行緒安全的,我只是盡量的避免了衝突的可能性。如果訊息不是非常的密集,比如幾秒鐘才乙個,還是可以考慮這樣使用的。

如果你要實現執行緒安全的,乙個建議是通過檔案進行鎖定,然後進行操作。下面是**:

class

memcache_queue

$this

->

memcache 

=$memcache

;$this

->

name 

=$name

;$this

->

prefix 

=$prefix

;$this

->

maxsize 

=$maxsize

;$this

->

front =0

;$this

->

real =0

;$this

->

size =0

;}function

__get(

$name

)function

__set(

$name

,$value

) function

isempty() 

function

isfull()

function

enqueue(

$data

)$this

->

increment(

"size");

$this

->

set(

$this

->

real

,$data

);$this

->

set(

"real",

($this

->

real +1

) %$this

->

maxsize);

return

$this;}

function

dequeue()

$this

->

decrement(

"size");

$this

->

delete(

$this

->

front);

$this

->

set(

"front",

($this

->

front +1

) %$this

->

maxsize);

return

$this;}

function

gettop()

function

getall()

function

getpage(

$offset=0

,$limit=0

)$keys =

$this

->

getkeybypos((

$this

->

front 

+$offset) %

$this

->

maxsize);

$num=1

;for

($pos=(

$this

->

front 

+$offset+1

) %$this

->

maxsize; 

$pos

!=$this

->

real; 

$pos=(

$pos+1

) %$this

->

maxsize) 

}return

array_values

($this

->

memcache

->

get(

$keys

));}

function

makeempty()

$this

->

delete(

"real");

$this

->

delete(

"front");

$this

->

delete(

"size");

$this

->

delete(

"maxsize");

}private

function

getallkeys()

$keys =

$this

->

getkeybypos(

$this

->

front);

for(

$pos=(

$this

->

front +1

) %$this

->

maxsize; 

$pos

!=$this

->

real; 

$pos=(

$pos+1

) %$this

->

maxsize) 

return

$keys;}

private

function

add(

$pos

,$data

) private

function

increment(

$pos

)private

function

decrement(

$pos

) private

function

set(

$pos

,$data

) private

function

get(

$pos

)private

function

delete(

$pos

)private

function

getkeybypos(

$pos)}

memcache實現訊息佇列例項

memche訊息佇列的原理就是在key上做文章,用以做乙個連續的數字加上字首記錄序列化以後訊息或者日誌。然後通過定時程式將內容落地到檔案或者資料庫。php實現訊息佇列的用處比如在做傳送郵件時傳送大量郵件很費時間的問題,那麼可以採取佇列。方便實現佇列的輕量級佇列伺服器是 starling支援memca...

memcache實現訊息佇列例項

memche訊息佇列的原理就是在key上做文章,用以做乙個連續的數字加上字首記錄序列化以後訊息或者日誌。然後通過定時程式將內容落地到檔案或者資料庫。php實現訊息佇列的用處比如在做傳送郵件時傳送大量郵件很費時間的問題,那麼可以採取佇列。方便實現佇列的輕量級佇列伺服器是 starling支援memca...

PHP下用Memcache 實現訊息佇列

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