用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程序的php代码
Apr 07 PHP
PHP高自定义性安全验证码代码
Nov 27 PHP
PHP代码审核的详细介绍
Jun 13 PHP
下拉列表多级联动dropDownList示例代码
Jun 27 PHP
PHP Switch 语句之学习笔记
Sep 21 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
Apr 24 PHP
PHP抓取及分析网页的方法详解
Apr 26 PHP
PHP+MySQL存储数据常见中文乱码问题小结
Jun 13 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
Oct 08 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
Mar 25 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
Sep 10 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
Oct 15 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 和 XML: 使用expat函数(二)
2006/10/09 PHP
PHP容易被忽略而出错陷阱 数字与字符串比较
2011/11/10 PHP
php Ubb代码编辑器函数代码
2012/07/05 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
php简单socket服务器客户端代码实例
2015/05/18 PHP
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
PHP单例模式定义与使用实例详解
2017/02/06 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
2017/12/14 PHP
PHP编程一定要改掉的5个不良习惯
2020/09/18 PHP
javascript动态向网页中添加表格实现代码
2014/02/19 Javascript
深入探讨JavaScript String对象
2015/03/09 Javascript
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
原生js结合html5制作小飞龙的简易跳球
2015/03/30 Javascript
JS实现黑色大气的二级导航菜单效果
2015/09/18 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
深入分析javascript中的错误处理机制
2016/07/17 Javascript
基于javascript的异步编程实例详解
2017/04/10 Javascript
vue.extend与vue.component的区别和联系
2018/09/19 Javascript
JS简单数组排序操作示例【sort方法】
2019/05/17 Javascript
Python实现的检测网站挂马程序
2014/11/30 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
3个用于数据科学的顶级Python库
2018/09/29 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
Python3.7实现验证码登录方式代码实例
2020/02/14 Python
python3 logging日志封装实例
2020/04/08 Python
PyQt5实现登录页面
2020/05/30 Python
Python数据可视化图实现过程详解
2020/06/12 Python
美国时尚孕妇装品牌:A Pea in the Pod
2017/07/16 全球购物
日本最大级玩偶手办购物:あみあみ Amiami
2018/04/23 全球购物
部队学习十八大感言
2014/01/11 职场文书
机械电子工程专业自荐书
2014/06/10 职场文书
管理标语大全
2014/06/24 职场文书
中学学校门卫岗位职责
2014/08/15 职场文书
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
vue elementUI表格控制对应列
2022/04/13 Vue.js
JS前端可视化canvas动画原理及其推导实现
2022/08/05 Javascript