用PHP写的基于Memcache的Queue实现代码

PHP代码: @H_403_0@<div class="codetitle"><a style="CURSOR: pointer" data="31644" class="copybut" id="copybut31644" onclick="doCopy('code31644')"> 代码如下:

<div class="codebody" id="code31644"> @H_403_0@<?PHP @H_4030@class MQ{ @H4030@public static $client; @H403_0@private static $mreal; @H403_0@private static $mfront; @H403_0@private static $mdata = array(); @H403_0@const QUEUE_MAXNUM = 100000000; @H403_0@const QUEUE_FRONT_KEY = '_queue_itemfront'; @H403_0@const QUEUE_REAL_KEY = '_queue_itemreal'; @H4030@public static function setupMq($conf) { @H403_0@self::$client = memcachepconnect($conf); @H403_0@self::$m_real = memcache_get(self::$client,self::QUEUE_REALKEY); @H403_0@self::$m_front = memcache_get(self::$client,self::QUEUE_FRONTKEY); @H403_0@if (!isset(self::$m_real) || emptyempty(self::$mreal)) { @H4030@self::$real= 0; @H4030@} @H403_0@if (!isset(self::$m_front) || emptyempty(self::$mfront)) { @H403_0@self::$mfront = 0; @H4030@} @H4030@return self::$client; @H4030@} @H4030@public static function add($queue,$data) { @H4030@$result = false; @H403_0@if (self::$m_real < self::QUEUE_MAXNUM) { @H403_0@if (memcache_add(self::$client,$queue.self::$mreal,$data)) { @H4030@self::mqRealChange(); @H4030@$result = true; @H4030@} @H4030@} @H4030@return $result; @H4030@} @H4030@public static function get($key,$count) { @H4030@$num = 0; @H403_0@for ($i=self::$m_front;$i<self::$mfront + $count;$i++) { @H403_0@if ($dataTmp = memcacheget(self::$client,$key.$i)) { @H403_0@self::$mdata[] = $dataTmp; @H403_0@memcachedelete(self::$client,$key.$i); @H4030@$num++; @H4030@} @H4030@} @H4030@if ($num>0) { @H4030@self::mqFrontChange($num); @H4030@} @H403_0@return self::$mdata; @H4030@} @H4030@private static function mqRealChange() { @H403_0@memcache_add(self::$client,self::QUEUE_REALKEY,0); @H403_0@self::$m_real = memcacheincrement(self::$client,1); @H4030@} @H4030@private static function mqFrontChange($num) { @H403_0@memcache_add(self::$client,self::QUEUE_FRONTKEY,0); @H403_0@self::$m_front = memcacheincrement(self::$client,$num); @H4030@} @H403_0@public static function mflush($memcacheobj) { @H403_0@memcache_flush($memcacheobj); @H4030@} @H4030@public static function Debug() { @H403_0@echo 'real:'.self::$mreal."
/r/n"; @H
403_0@echo 'front:'.self::$mfront."
/r/n"; @H
403_0@echo 'wait for process data:'.intval(self::$m_real - self::$mfront); @H4030@echo "
/r/n"; @H
4030@echo '
'; @H403_0@print_r(self::$mdata); @H4030@echo '
'; @H4030@} @H4030@} @H403_0@define('FLUSHMQ',0);//CLEAN ALL DATA @H403_0@define('ISADD',0);//SET DATA @H4030@$mobj = MQ::setupMq('127.0.0.1','11211'); @H403_0@if (FLUSHMQ) { @H4030@MQ::mflush($mobj); @H4030@} else { @H403_0@if (ISADD) { @H403_0@MQ::add('usersync','1test'); @H403_0@MQ::add('usersync','2test'); @H403_0@MQ::add('usersync','3test'); @H403_0@MQ::add('usersync','4test'); @H403_0@MQ::add('usersync','5test'); @H403_0@MQ::add('usersync','6test'); @H4030@} else { @H403_0@MQ::get('usersync',10); @H4030@} @H4030@} @H4030@MQ::Debug(); @H4030@?> @H4030@
@H403_0@使用方法 @H_403_0@<div class="codetitle"><a style="CURSOR: pointer" data="23358" class="copybut" id="copybut23358" onclick="doCopy('code23358')"> 代码如下:
<div class="codebody" id="code23358"> @H_4030@MQ::setupMq('127.0.0.1','11211');//连接 @H403_0@MQ::add($key,$value);//添加数据到队列 @H_403_0@MQ::add($key,$value);//添加数据到队列 @H_403_0@MQ:get($key,10);//取出一定数量的数据 @H_403_0@

相关文章

Hessian开源的远程通讯,采用二进制 RPC的协议,基于 HTTP 传输。可以实现PHP调用Java,Python,C#等多语...
初识Mongodb的一些总结,在Mac Os X下真实搭建mongodb环境,以及分享个Mongodb管理工具,学习期间一些总结...
边看边操作,这样才能记得牢,实践是检验真理的唯一标准.光看不练假把式,光练不看傻把式,边看边练真把式....
在php中,结果输出一共有两种方式:echo和print,下面将对两种方式做一个比较。 echo与print的区别: (...
在安装好wampServer后,一直没有使用phpMyAdmin,今天用了一下,phpMyAdmin显示错误:The mbstring exte...
变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变...