用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 相关文章推荐
IIS下配置Php+Mysql+zend的图文教程
Dec 08 PHP
php 分页原理详解
Aug 21 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
Feb 21 PHP
7个鲜为人知却非常实用的PHP函数
Jul 01 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
Nov 04 PHP
2款PHP无限级分类实例代码
Nov 11 PHP
CI框架中redis缓存相关操作文件示例代码
May 17 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
Nov 20 PHP
phpmyadmin下载、安装、配置教程
May 16 PHP
PHP Trait功能与用法实例分析
Jun 03 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
Oct 30 PHP
如何用PHP websocket实现网页实时聊天
May 26 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
discuz Passport 通行证 整合笔记
2008/06/30 PHP
php中取得文件的后缀名?
2012/02/20 PHP
php基于mcrypt的加密解密实例
2014/10/27 PHP
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
JQuery动态创建DOM、表单元素的实现代码
2011/08/09 Javascript
JavaScript获取和设置CheckBox状态的简单方法
2013/07/05 Javascript
IE6下拉框图层问题探讨及解决
2014/01/03 Javascript
JsRender for index循环索引用法详解
2014/10/31 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
3个可以改善用户体验的AngularJS指令介绍
2015/06/18 Javascript
纯JavaScript代码实现文本比较工具
2016/02/17 Javascript
Bootstrap基本样式学习笔记之表单(3)
2016/12/07 Javascript
基于JavaScript实现熔岩灯效果导航菜单
2017/01/04 Javascript
利用ECharts.js画K线图的方法示例
2018/01/10 Javascript
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
浅谈React组件之性能优化
2018/03/02 Javascript
Angular6新特性之Angular Material
2018/12/28 Javascript
javascript实现的图片预览和上传功能示例【兼容IE 9】
2020/05/01 Javascript
[00:23]DOTA2群星共贺开放测试 25日无码时代来袭
2013/09/23 DOTA
[02:36]DOTA2英雄基础教程 一击致命幻影刺客
2013/12/06 DOTA
Python使用sorted排序的方法小结
2017/07/28 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
2018/07/04 Python
Python3数字求和的实例
2019/02/19 Python
python异常处理和日志处理方式
2019/12/24 Python
pandas创建DataFrame的7种方法小结
2020/06/14 Python
keras做CNN的训练误差loss的下降操作
2020/06/22 Python
CSS3 mask 遮罩的具体使用方法
2017/11/03 HTML / CSS
巴西宠物店在线:Geração Pet
2017/05/31 全球购物
顶岗实习接收函
2014/01/09 职场文书
店长职务说明书
2014/02/04 职场文书
会展策划与管理专业大学生职业生涯规划
2014/02/07 职场文书
公司周年庆活动方案
2014/08/25 职场文书
2015年项目工作总结
2015/04/29 职场文书
安全主题班会教案
2015/08/12 职场文书
python实战之一步一步教你绘制小猪佩奇
2021/04/22 Python