用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 foreach、while性能比较
Oct 15 PHP
PHP 防恶意刷新实现代码
May 16 PHP
PHP英文字母大小写转换函数小结
May 03 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
Oct 08 PHP
PHP使用mkdir创建多级目录的方法
Dec 22 PHP
php编程每天必学之表单验证
Mar 01 PHP
PHP中递归的实现实例详解
Nov 14 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
PHP Cli 模式设置进程名称的方法
Jun 12 PHP
零基础php编程好学吗
Oct 11 PHP
简单的php购物车代码
Jun 05 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
Nov 10 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
dedecms中常见问题修改方法总结
2007/03/21 PHP
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
2007/03/29 PHP
PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
2012/04/02 PHP
php使用PDO事务配合表格读取大量数据插入操作实现方法
2017/02/16 PHP
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
2011/07/10 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
使用js 设置url参数
2013/07/08 Javascript
JavaScript学习笔记整理之引用类型
2016/01/22 Javascript
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
Javascript中apply、call、bind的巧妙使用
2016/08/18 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
2016/12/21 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
Angular2库初探
2017/03/01 Javascript
JavaScript评论点赞功能的实现方法
2017/03/13 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
vuex 的简单使用
2018/03/22 Javascript
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
js实现一款简单踩白块小游戏(曾经很火)
2019/12/02 Javascript
jquery实现两个div中的元素相互拖动的方法分析
2020/04/05 jQuery
如何用Python做一个微信机器人自动拉群
2019/07/03 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
python动态视频下载器的实现方法
2019/09/16 Python
python中的itertools的使用详解
2020/01/13 Python
Python如何通过百度翻译API实现翻译功能
2020/04/02 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
python中查看.db文件中表格的名字及表格中的字段操作
2020/07/07 Python
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
文职个人求职信范文
2013/09/23 职场文书
出纳员的岗位职责
2014/02/22 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
大一工商管理职业生涯规划:有梦最美,行动相随
2014/09/18 职场文书
大学生赌博检讨书
2014/09/22 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
2015年学校教研室主任工作总结
2015/07/20 职场文书
优秀创业计划书分享
2019/07/19 职场文书
mysql下的max_allowed_packet参数设置详解
2022/02/12 MySQL