用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框架的性能
Jan 10 PHP
从Web查询数据库之PHP与MySQL篇
Sep 25 PHP
PHP 读取文件内容代码(txt,js等)
Dec 06 PHP
php安全开发 添加随机字符串验证,防止伪造跨站请求
Feb 14 PHP
PHP实现查询两个数组中不同元素的方法
Feb 23 PHP
Symfony2之session与cookie用法小结
Mar 18 PHP
highchart数据源纵轴json内的值必须是int(详解)
Feb 20 PHP
PHP实现的Redis多库选择功能单例类
Jul 27 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
Nov 24 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
May 15 PHP
PHP数组实际占用内存大小原理解析
Dec 11 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 CURL 多线程操作代码实例
2015/05/13 PHP
zen_cart实现支付前生成订单的方法
2016/05/06 PHP
创建一个复制UBB软件信息的链接或按钮的js代码
2008/01/06 Javascript
面向对象的编程思想在javascript中的运用上部
2009/11/20 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
2013/04/15 Javascript
jQuery实现下拉框左右选择的简单实例
2014/02/22 Javascript
jquery实现动态操作select选中
2015/02/11 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
2015/03/24 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
搭建Bootstrap离线文档的方法
2016/12/02 Javascript
Nodejs搭建wss服务器教程
2017/05/24 NodeJs
bootstrap table使用入门基本用法
2017/05/24 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
2018/10/07 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
中高级前端必须了解的JS中的内存管理(推荐)
2019/07/04 Javascript
原生JavaScript实现幻灯片效果
2021/02/19 Javascript
解决uWSGI的编码问题详解
2017/03/24 Python
Python实现合并同一个文件夹下所有txt文件的方法示例
2018/04/26 Python
Python闭包执行时值的传递方式实例分析
2018/06/04 Python
django框架基于queryset和双下划线的跨表查询操作详解
2019/12/11 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
keras打印loss对权重的导数方式
2020/06/10 Python
5 分钟读懂Python 中的 Hook 钩子函数
2020/12/09 Python
Html5画布_动力节点Java学院整理
2017/07/13 HTML / CSS
历史专业个人求职信分享
2013/12/20 职场文书
干部下基层实施方案
2014/03/14 职场文书
国际会计专业求职信
2014/08/04 职场文书
现场活动策划方案
2014/08/22 职场文书
投标人法定代表人授权委托书格式
2014/09/28 职场文书
学校感恩节活动策划方案
2014/10/06 职场文书
人工作失职检讨书
2015/05/05 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
离婚财产分割协议书
2015/08/11 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
Python语言内置数据类型
2022/02/24 Python