用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
PHP教程 变量定义
Oct 23 PHP
shopex主机报错误请求解决方案(No such file or directory)
Dec 27 PHP
php实现用于删除整个目录的递归函数
Mar 16 PHP
PHP简单实现生成txt文件到指定目录的方法
Apr 25 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
Nov 20 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
PHP判断是否微信访问的方法示例
Mar 27 PHP
基于Laravel-admin 后台的自定义页面用法详解
Sep 30 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
Oct 11 PHP
PHPstorm启用自动换行的方法详解(IDE)
Sep 17 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
Symfony2框架学习笔记之表单用法详解
2016/03/18 PHP
PHP页面间传递值和保持值的方法
2016/08/24 PHP
用Javascript 和 CSS 实现脚注(Footnote)效果
2009/09/09 Javascript
javaScript 利用闭包模拟对象的私有属性
2011/12/29 Javascript
javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2012/07/21 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
2013/01/16 Javascript
一个不错的仿携程自定义数据下拉选择select
2014/09/01 Javascript
javascript浏览器窗口之间传递数据的方法
2015/01/20 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
JavaScript变量的作用域全解析
2015/08/14 Javascript
js中对函数设置默认参数值的3种方法
2015/10/23 Javascript
纯js代码实现简单计算器
2015/12/02 Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
2017/03/31 Javascript
Vue 框架之动态绑定 css 样式实例分析
2018/11/14 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
2019/01/06 Javascript
Nodejs + Websocket 指定发送及群聊的实现
2020/01/09 NodeJs
js 解析 JSON 数据简单示例
2020/04/21 Javascript
python 多进程通信模块的简单实现
2014/02/20 Python
python简单的函数定义和用法实例
2015/05/07 Python
一看就懂得Python的math模块
2018/10/21 Python
python中树与树的表示知识点总结
2019/09/14 Python
python调用函数、类和文件操作简单实例总结
2019/11/29 Python
Python中itertools的用法详解
2020/02/07 Python
iPython pylab模式启动方式
2020/04/24 Python
Python pymsql模块的使用
2020/09/07 Python
实现Python3数组旋转的3种算法实例
2020/09/16 Python
Belvilla德国:在线预订度假屋
2018/04/10 全球购物
捷克家居装饰及图书音像购物网站:Velký košík
2018/04/16 全球购物
抽象方法、抽象类怎样声明
2014/10/25 面试题
行政人员工作职责
2013/12/05 职场文书
《飞向蓝天的恐龙》教学反思
2014/04/09 职场文书
保密工作整改情况汇报
2014/11/06 职场文书
优秀班主任推荐材料
2014/12/17 职场文书
微信搭讪开场白
2015/05/28 职场文书
保姆聘用合同
2015/09/21 职场文书
Python使用UDP实现720p视频传输的操作
2021/04/24 Python