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 實現的乙個訊息佇列,只...