PHP下用Memcache 實現訊息佇列

2021-06-02 13:40:18 字數 3318 閱讀 4241

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)}

PHP環境下memcache安裝

本次安裝環境是windows,開發環境是phpstudy 32位系統 1.2.6版本 32位系統 1.4.4版本 64位系統 1.4.4版本 32位系統 1.4.5版本 64位系統 1.4.5版本 memcached安裝 版本 1.4.5,可當作服務memcached.exe d install 安...

linux下PHP中新增memcache擴充套件支援

yum install libevent devel wget tar zxvf memcached 1.4.5.tar.gz configure prefix usr local memcached build i686 pc linux gnu 這一步會看到缺少gcc yum install g...

Linux下php安裝memcache擴充套件

安裝環境 centos 6.4 php擴充套件memcache的作用是為了支援memcached資料庫快取伺服器,下面是安裝方法。檔名 memcache 3.0.8.tgz 2 安裝 root vm15 local tar zxvf memcache 3.0.8.tgz root vm15 loca...