用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中的 == 运算符进行字符串比较
Nov 26 PHP
PHP生成网页快照 不用COM不用扩展.
Feb 11 PHP
PHP生成随机密码类分享
Jun 25 PHP
PHP中的插件机制原理和实例
Jul 08 PHP
php和editplus正则表达式去除空白行
Apr 17 PHP
yii2使用gridView实现下拉列表筛选数据
Apr 10 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
May 08 PHP
PHP使用栈解决约瑟夫环问题算法示例
Aug 27 PHP
PHP折半(二分)查找算法实例分析
May 12 PHP
掌握PHP垃圾回收机制详解
Mar 13 PHP
YII框架实现自定义第三方扩展操作示例
Apr 26 PHP
基于PHP+mysql实现新闻发布系统的开发
Aug 06 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中导出数据到excel时数字变为科学计数的解决方法
2013/02/03 PHP
PHP中的事务使用实例
2015/05/26 PHP
php生成gif动画的方法
2015/11/05 PHP
使用Huagepage和PGO来提升PHP7的执行性能
2015/11/30 PHP
PHP获取当前文件的父目录方法汇总
2016/07/21 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
PHP操作路由器实现方法示例
2019/04/27 PHP
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
vue数据双向绑定原理解析(get &amp; set)
2017/03/08 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
vue 微信授权登录解决方案
2018/04/10 Javascript
vuex实现数据状态持久化
2019/11/11 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
2020/04/04 jQuery
JS数据类型分类及常用判断方法
2020/11/19 Javascript
使用python编写脚本获取手机当前应用apk的信息
2014/07/21 Python
Python实现简单拆分PDF文件的方法
2015/07/30 Python
详解Python中heapq模块的用法
2016/06/28 Python
python中map()函数的使用方法示例
2017/09/29 Python
python利用有道翻译实现&quot;语言翻译器&quot;的功能实例
2017/11/14 Python
Python数据预处理之数据规范化(归一化)示例
2019/01/08 Python
python的schedule定时任务模块二次封装方法
2019/02/19 Python
Python实现把多维数组展开成DataFrame
2019/11/30 Python
python如何获取apk的packagename和activity
2020/01/10 Python
TensorFlow实现指数衰减学习率的方法
2020/02/05 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
详解利用canvas实现环形进度条的方法
2019/06/12 HTML / CSS
FILA斐乐中国官方商城:意大利运动品牌
2017/01/25 全球购物
西班牙太阳镜品牌:Hawkers
2018/03/11 全球购物
锐步英国官网:Reebok英国
2019/11/29 全球购物
电钳专业个人求职信
2014/01/04 职场文书
商铺租赁意向书
2014/04/01 职场文书
2014年五四青年节演讲比赛方案
2014/04/22 职场文书
导游词400字
2015/02/13 职场文书
为什么 Nginx 比 Apache 更牛逼
2021/03/31 Servers
JavaScript+HTML实现学生信息管理系统
2021/04/20 Javascript