用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跳出循环的方法以及continue、break、exit的区别介绍
Jul 01 PHP
php使用正则过滤js脚本代码实例
May 10 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
Aug 19 PHP
php命令行用法入门实例教程
Oct 27 PHP
通过Email发送PHP错误的方法
Jul 20 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
Dec 14 PHP
PHP接口并发测试的方法(推荐)
Dec 15 PHP
PHP框架laravel的.env文件配置教程
Jun 07 PHP
PHP基于SimpleXML生成和解析xml的方法示例
Jul 17 PHP
PHP设计模式之原型模式定义与用法详解
Apr 03 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
Jun 06 PHP
浅谈laravel orm 中的一对多关系 hasMany
Oct 21 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
phpmyadmin里面导入sql语句格式的大量数据的方法
2010/06/05 PHP
php实现通用的信用卡验证类
2015/03/24 PHP
PHP如何实现Unicode和Utf-8编码相互转换
2015/07/29 PHP
在php中设置session用memcache来存储的方法总结
2016/01/14 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
JavaScript 事件属性绑定带参数的函数
2009/03/13 Javascript
jquery入门—选择器实现隔行变色实例代码
2013/01/04 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
jQuery实现自定义checkbox和radio样式
2015/07/13 Javascript
js实现浏览器倒计时跳转页面效果
2016/08/12 Javascript
js H5 canvas投篮小游戏
2016/08/18 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
2016/08/19 Javascript
详解Vue.js 2.0 如何使用axios
2017/04/21 Javascript
JS查找数组中重复元素的方法详解
2017/06/14 Javascript
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
微信小程序使用 vant Dialog组件的正确方式
2020/02/21 Javascript
Js on及addEventListener原理用法区别解析
2020/07/11 Javascript
python optparse模块使用实例
2015/04/09 Python
Python中返回字典键的值的values()方法使用
2015/05/22 Python
机器学习python实战之手写数字识别
2017/11/01 Python
对python 匹配字符串开头和结尾的方法详解
2018/10/27 Python
使用 Python 遍历目录树的方法
2020/02/29 Python
Jupyter notebook无法导入第三方模块的解决方式
2020/04/15 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
html5中valid、invalid、required的定义
2014/02/21 HTML / CSS
HTML5声音录制/播放功能的实现代码
2018/05/03 HTML / CSS
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
介绍一些UNIX常用简单命令
2014/11/11 面试题
体育教育个人自荐信范文
2013/12/01 职场文书
毕业生自荐书
2014/02/02 职场文书
税务会计岗位职责
2015/04/02 职场文书
2015年大学迎新工作总结
2015/07/16 职场文书
幼儿园托班开学寄语(2016秋季)
2015/12/03 职场文书
医学会议开幕词
2016/03/03 职场文书
不负正版帝国之名 《重返帝国》引领SLG手游制作新的标杆
2022/04/07 其他游戏
Golang Elasticsearches 批量修改查询及发送MQ
2022/04/19 Golang