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


Posted in PHP onNovember 27, 2011

php类代码:

<?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<self::$m_front + $count;$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."<br>/r/n"; 
echo 'front:'.self::$m_front."<br>/r/n"; 
echo 'wait for process data:'.intval(self::$m_real - self::$m_front); 
echo "<br>/r/n"; 
echo '<pre>'; 
print_r(self::$m_data); 
echo '<pre>'; 
} 
} 
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);//取出一定数量的数据
PHP 相关文章推荐
简单的用PHP编写的导航条程序
Oct 09 PHP
phpmyadmin 3.4 空密码登录的实现方法
May 29 PHP
php将fileterms函数返回的结果变成可读的形式
Apr 21 PHP
简单的PHP多图上传小程序代码
Jul 17 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
Jul 01 PHP
php jsonp单引号转义
Nov 23 PHP
PHP中使用xmlreader读取xml数据示例
Dec 29 PHP
PHP入门教程之图像处理技巧分析
Sep 11 PHP
PHP自定义错误用法示例
Sep 28 PHP
PHPCMS手机站伪静态设置详细教程
Feb 06 PHP
PHP实现的数组和XML文件相互转换功能示例
Mar 15 PHP
phpStudy vscode 搭建debug调试的教程详解
Jul 28 PHP
PHP中去除换行解决办法小结(PHP_EOL)
Nov 27 #PHP
php操作SVN版本服务器类代码
Nov 27 #PHP
支持中文的php加密解密类代码
Nov 27 #PHP
php UBB 解析实现代码
Nov 27 #PHP
PHP高自定义性安全验证码代码
Nov 27 #PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
Nov 26 #PHP
Linux fgetcsv取得的数组元素为空字符串的解决方法
Nov 25 #PHP
You might like
php中转义mysql语句的实现代码
2011/06/24 PHP
PHP多线程编程之管道通信实例分析
2015/03/07 PHP
实现PHP搜索加分页
2016/10/12 PHP
深入浅出讲解:php的socket通信原理
2016/12/03 PHP
Javascript 获取滚动条位置等信息的函数
2009/09/08 Javascript
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
2010/11/14 Javascript
DIV菜单层实现代码
2010/11/19 Javascript
form表单中去掉默认的enter键提交并绑定js方法实现代码
2013/04/01 Javascript
javascript中的原型链深入理解
2014/02/24 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
2015/09/19 Javascript
前端JS面试中常见的算法问题总结
2016/12/23 Javascript
servlet+jquery实现文件上传进度条示例代码
2017/01/25 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
2017/02/14 Javascript
Angular4绑定html内容出现警告的处理方法
2017/11/03 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
NodeJS服务器实现gzip压缩的示例代码
2018/10/12 NodeJs
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
[08:44]和酒神一起战斗 DOTA2教你做大人
2014/03/27 DOTA
python微信公众号之关注公众号自动回复
2018/10/25 Python
解决python字典对值(值为列表)赋值出现重复的问题
2019/01/20 Python
python flask解析json数据不完整的解决方法
2019/05/26 Python
python字符串替换re.sub()方法解析
2019/09/18 Python
详解python中eval函数的作用
2019/10/22 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
美国特价机票专家:Airfarewatchdog
2018/01/24 全球购物
Delphi软件工程师试题
2013/01/29 面试题
高中生学习生活的自我评价
2013/11/27 职场文书
单位刻章介绍信范文
2014/01/11 职场文书
工程采购员岗位职责
2014/03/09 职场文书
护理专业毕业生自我鉴定总结
2014/03/24 职场文书
2014年化工厂工作总结
2014/11/25 职场文书
论文答谢词
2015/01/20 职场文书
2015年度合同管理工作总结
2015/05/22 职场文书
使用redis实现延迟通知功能(Redis过期键通知)
2021/09/04 Redis