用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 可阅读随机字符串代码
May 26 PHP
PHP Session 变量的使用方法详解与实例代码
Sep 11 PHP
使用php显示搜索引擎来的关键词
Feb 13 PHP
PHP取余函数介绍MOD(x,y)与x%y
May 15 PHP
美图秀秀web开放平台--PHP流式上传和表单上传示例分享
Jun 22 PHP
php调用mysql存储过程实例分析
Dec 29 PHP
PHP中返回引用类型的方法
Apr 03 PHP
PHP基于反射机制实现插件的可插拔设计详解
Nov 10 PHP
数组任意位置插入元素,删除特定元素的实例
Mar 02 PHP
Yii框架实现图片上传的方法详解
May 20 PHP
php精度计算的问题解析
Jun 21 PHP
php中对象引用和复制实例分析
Aug 14 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+mysql事务rollback&amp;commit示例
2010/02/08 PHP
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
2010/08/01 PHP
php隐藏IP地址后两位显示为星号的方法
2014/11/21 PHP
PHP验证信用卡卡号是否正确函数
2015/05/27 PHP
在html页面中包含共享页面的方法
2008/10/24 Javascript
js输出列表实现代码
2010/09/12 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
JavaScript实现鼠标滑过图片变换效果的方法
2015/04/16 Javascript
js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
2016/12/27 Javascript
angularjs中ng-attr的用法详解
2016/12/31 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
2017/03/07 Javascript
angularjs+bootstrap实现自定义分页的实例代码
2017/06/19 Javascript
nuxt+axios解决前后端分离SSR的示例代码
2017/10/24 Javascript
Vue组件开发之LeanCloud带图形校验码的短信发送功能
2017/11/07 Javascript
Moment.js实现多个同时倒计时
2019/08/26 Javascript
JS+CSS实现动态时钟
2021/02/19 Javascript
Python urlopen 使用小示例
2008/09/06 Python
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
python通过zlib实现压缩与解压字符串的方法
2014/11/19 Python
python实现将文本转换成语音的方法
2015/05/28 Python
浅谈对yield的初步理解
2017/05/29 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
Python实现获取前100组勾股数的方法示例
2018/05/04 Python
Python网页正文转换语音文件的操作方法
2018/12/09 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
Python如何使用BeautifulSoup爬取网页信息
2019/11/26 Python
pycharm 实现光标快速移动到括号外或行尾的操作
2021/02/05 Python
摄影实习自我鉴定
2013/09/20 职场文书
互联网创业计划书的书写步骤
2014/01/28 职场文书
高中数学教学反思
2014/01/30 职场文书
小学生美德少年事迹
2014/02/02 职场文书
幼儿教师工作感言
2014/02/14 职场文书
小学数学教研活动总结
2014/07/01 职场文书
招商银行收入证明
2015/06/17 职场文书
关于战胜挫折的名言警句大全!
2019/07/05 职场文书
600字作文之感受大自然
2019/11/27 职场文书