用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 相关文章推荐
PHP4 与 MySQL 数据库操作函数详解
Oct 09 PHP
用php+mysql一个名片库程序
Oct 09 PHP
同一空间绑定多个域名而实现访问不同页面的PHP代码
Dec 06 PHP
php中变量及部分适用方法
Mar 27 PHP
win2003服务器使用WPS的COM组件的一些问题解决方法
Jan 11 PHP
PHP关联数组的10个操作技巧
Jan 21 PHP
php foreach正序倒序输出示例代码
Jul 01 PHP
php自定义加密与解密程序实例
Dec 31 PHP
PHP中判断文件存在使用is_file还是file_exists?
Apr 03 PHP
PHP框架自动加载类文件原理详解
Jun 06 PHP
Yii框架日志记录Logging操作示例
Jul 12 PHP
PHP session垃圾回收机制实例分析
Jun 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根据ip查询所在地区(非常有用,赶集网就用到)
2013/07/01 PHP
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
使用jquery获取网页中图片高度的两种方法
2013/09/26 Javascript
判定是否原生方法的JS代码
2013/11/12 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
浅谈$(document)和$(window)的区别
2015/07/15 Javascript
纯javascript实现自动发送邮件
2015/10/21 Javascript
浅析JavaScript中作用域和作用域链
2016/12/06 Javascript
Vue 实用分页paging实例代码
2017/04/12 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
layDate插件设置开始和结束时间
2018/11/15 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
ES6使用 Array.includes 处理多重条件用法实例分析
2020/03/02 Javascript
vue中父子组件的参数传递和应用示例
2021/01/04 Vue.js
JS实现点击掉落特效
2021/01/29 Javascript
详解vite2.0配置学习(typescript版本)
2021/02/25 Javascript
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
python http接口自动化脚本详解
2018/01/02 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
2020/09/01 Python
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
GUESS盖尔斯法国官网:美国时尚品牌
2016/09/23 全球购物
美国知名眼镜网站:Target Optical
2020/04/04 全球购物
工作中的自我评价如何写好
2013/10/28 职场文书
材料物理专业个人求职信
2013/12/15 职场文书
打造完美自荐信
2014/01/24 职场文书
数控专业大学毕业生职业规划范文
2014/02/06 职场文书
2014年两会学习心得体会
2014/03/17 职场文书
共产党员公开承诺书范文
2014/03/28 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
初中学习计划书范文
2014/09/15 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
2014年班主任工作总结
2014/11/08 职场文书
小学生通知书评语
2014/12/31 职场文书
挂职个人工作总结
2015/03/05 职场文书
严以律己专题学习研讨会发言材料
2015/11/09 职场文书
python简单验证码识别的实现过程
2021/06/20 Python