用php写的基于memcache的queue实现代码,PHP_用PHP写的基于Memcache的Queue实现代码,php类代码: 复制代码 代码如下: - phpStudy...

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

php类代码:

复制代码 代码如下:

class MQ{

public static $client;

private static $m_real;

private static $m_front;

private static $m_data = array();

const QUEUE_MAX_NUM = 100000000;

const QUEUE_FRONT_KEY = '_queue_item_front';

const QUEUE_REAL_KEY = '_queue_item_real';

public static function setupMq($conf) {

self::$client = memcache_pconnect($conf);

self::$m_real = memcache_get(self::$client, self::QUEUE_REAL_KEY);

self::$m_front = memcache_get(self::$client, self::QUEUE_FRONT_KEY);

if (!isset(self::$m_real) || emptyempty(self::$m_real)) {

self::$real= 0;

}

if (!isset(self::$m_front) || emptyempty(self::$m_front)) {

self::$m_front = 0;

}

return self::$client;

}

public static function add($queue, $data) {

$result = false;

if (self::$m_real < self::QUEUE_MAX_NUM) {

if (memcache_add(self::$client, $queue.self::$m_real, $data)) {

self::mqRealChange();

$result = true;

}

}

return $result;

}

public static function get($key, $count) {

$num = 0;

for ($i=self::$m_front;$i<:>

if ($dataTmp = memcache_get(self::$client, $key.$i)) {

self::$m_data[] = $dataTmp;

memcache_delete(self::$client, $key.$i);

$num++;

}

}

if ($num>0) {

self::mqFrontChange($num);

}

return self::$m_data;

}

private static function mqRealChange() {

memcache_add(self::$client, self::QUEUE_REAL_KEY, 0);

self::$m_real = memcache_increment(self::$client, self::QUEUE_REAL_KEY, 1);

}

private static function mqFrontChange($num) {

memcache_add(self::$client, self::QUEUE_FRONT_KEY, 0);

self::$m_front = memcache_increment(self::$client, self::QUEUE_FRONT_KEY, $num);

}

public static function mflush($memcache_obj) {

memcache_flush($memcache_obj);

}

public static function Debug() {

echo 'real:'.self::$m_real."
/r/n";

echo 'front:'.self::$m_front."
/r/n";

echo 'wait for process data:'.intval(self::$m_real - self::$m_front);

echo "
/r/n";

echo '

';

print_r(self::$m_data);

echo '

';

}

}

define('FLUSH_MQ',0);//CLEAN ALL DATA

define('IS_ADD',0);//SET DATA

$mobj = MQ::setupMq('127.0.0.1','11211');

if (FLUSH_MQ) {

MQ::mflush($mobj);

} else {

if (IS_ADD) {

MQ::add('user_sync', '1test');

MQ::add('user_sync', '2test');

MQ::add('user_sync', '3test');

MQ::add('user_sync', '4test');

MQ::add('user_sync', '5test');

MQ::add('user_sync', '6test');

} else {

MQ::get('user_sync', 10);

}

}

MQ::Debug();

?>

使用方法

复制代码 代码如下:

MQ::setupMq('127.0.0.1','11211');//连接

MQ::add($key, $value);//添加数据到队列

MQ::add($key, $value);//添加数据到队列

MQ::add($key, $value);//添加数据到队列

MQ::add($key, $value);//添加数据到队列

MQ::add($key, $value);//添加数据到队列

MQ::add($key, $value);//添加数据到队列

MQ:get($key, 10);//取出一定数量的数据相关阅读:

JavaScript编程语言的编码规范

表格轮换显示 强

让SortTable和Asp.net Ajax和睦相处

社区电子商务不要拘泥于电子商务的形态

ORACLE中实现CRC32的计算函数,SOLARIS平台

关闭移动硬盘自动播放功能

DotNetNuke Skinning Whitepaper (皮肤上传部分)

Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据

根据对象的某一属性进行排序的js代码(如:name,age)

让Fedora Linux系统能够打开RAR文件

jQuery选中select控件 无法设置selected的解决方法

ASP实现无组件生成验证码-GIF格式

信箱秘诀:非 UTF-8 邮件客户端可检视 Exchange 传送的消息

PHP安装攻略:常见问题解答(一)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值