phpMemcache消息队列类
<?php /**
* Memcache 消息队列类
*/
class QMC { const PREFIX = 'ASDFASDFFWQKE'; /**
* 初始化 mc
* @staticvar string $mc
* @return Memcache
*/
static private function mc_init() {
static $mc = null;
if (is_null($mc)) {
$mc = new Memcache;
$mc->connect('127.0.0.1', 11211);
}
return $mc;
} /**
* mc 计数器 , 增加计数并返回新的计数
* @param string $key 计数器
* @param int $offset 计数增量 , 可为负数 .0 为不改变计数
* @param int $time 时间
* @return int/false 失败是返回 false, 成功时返回更新计数器后的计数
*/
static public function set_counter($key, $offset, $time = 0) {
$mc = self::mc_init();
$val = $mc->get($key);
if (!is_numeric($val) || $val < 0) {
$ret = $mc->set($key, 0, $time);
if (!$ret)
return false;
$val = 0;
}
$offset = intval($offset);
if ($offset > 0) {
return $mc->increment($key, $offset);
} elseif ($offset < 0) {
return $mc->decrement($key, -$offset);
}
return $val;
} /**
* 写入队列
* @param string $key
* @param mixed $value
* @return bool
*/
static public function input($key, $value) {
$mc = self::mc_init();
$w_key = self::PREFIX . $key . 'W';
$v_key = self::PREFIX . $key . self::set_counter($w_key, 1);
return $mc->set($v_key, $value);
} /**
* 读取队列里的数据
* @param string $key
* @param int $max 最多读取条数
* @return array
*/
static public function output($key, $max = 100) {
$out = array();
$mc = self::mc_init();
$r_key = self::PREFIX . $key . 'R';
$w_key = self::PREFIX . $key . 'W';
$r_p = self::set_counter($r_key, 0); // 读指针
$w_p = self::set_counter($w_key, 0); // 写指针
if ($r_p == 0)
$r_p = 1;
while ($w_p >= $r_p) {
if (--$max < 0)
break;
$v_key = self::PREFIX . $key . $r_p;
$r_p = self::set_counter($r_key, 1);
$out[] = $mc->get($v_key);
$mc->delete($v_key);
}
return $out;
}
} /**
* 使用方法 :
*/
QMC::input($key, $value); // 写入队列
$list = QMC::output($key); // 读取队列
?>
phpMemcache消息队列类的更多相关文章
- php-beanstalkd消息队列类分享
<?php namespace Common\Business; /** * beanstalk: A minimalistic PHP beanstalk client. * * Copyri ...
- PHP memcache实现消息队列实例
现在,memcache于server缓存广泛应用.下面我来介绍一下memcache消息队列中等待的样本实现,有需要了解的朋友可以参考. memche消息队列原则key上做文章.后消息或者日志. 然后通 ...
- ActiveMQ消息队列和SignalR之日志实时监控及警报小实例
主要技术: log4net-生成日志. ActiveMQ-生成日志的时候发送消息,并实时监控日志. SignalR-将ActiveMQ监控的日志实时显示到浏览器上,而不用刷新浏览器. 小实例介绍: 左 ...
- C# 模拟一个处理消息队列的线程类 Message Queue
// 模拟一个处理消息队列的类 class MessageHandler { // 消息队列 private Queue<string> messageQue = new Queue< ...
- java面试记录三:hashmap、hashtable、concurrentHashmap、ArrayList、linkedList、linkedHashmap、Object类的12个成员方法、消息队列MQ的种类
口述题 1.HashMap的原理?(数组+单向链表.put.get.size方法) 非线程安全:(1)hash冲突:多线程某一时刻同时操作hashmap并执行put操作时,可能会产两个key的hash ...
- RabbitMQ消息队列帮助类
调用 //消息队列发消息 MqConfigInfo config = new MqConfigInfo(); config.MQExChange = "DrawingOutput" ...
- Beanstalkd消息队列 -- php类Pheanstalk使用
业务场景 商城订单生成30分钟后 如果未支付关闭订单 解决办法 可以使用延迟消息队列 这里我们用的是beanstalkd Beanstalkd介绍 Beanstalk,一个高性能.轻量级的分布式内 ...
- 消息队列工具类(MSMQ)
所要做的是简化msmq的调用代码以及做到可替代性,实现后,调用消息队列代码变为如下所示: QueueService srv = QueueService.Instance(); //检查存储DTO1的 ...
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
随机推荐
- ASP.NET网站发布-允许更新此预编译站点 打勾与不打勾的区别
发布网站时在打开的对话框中,有一个选项是至关重要的,那就是“允许更新此预编译站点”: “允许更新此预编译站点”这一项,默认情况下,前面是打上一个√的,至于要不要打上一个√,是可选的,那么,打勾与不打勾 ...
- java编码问题深入总结
Java语言能够这么普遍的应用,与其国际化的能力是 分不开的,国际化的编码是Java国际化中最重要的一个组成部分,Java的国际化编码能力与其使用Unicode编码是直接相关的.在Java中,任何 ...
- 广度优先搜索BFS
广度优先搜索可以形成一个广度优先搜索树 算法时间为O(V+E),两重循环 输入:图g,起点start(int) 需要的数据结构:队列Q.color数组(存放每个顶点的颜色) 算法过程: 1. 预处理: ...
- [HDU 2068] RPG的错排 (错排问题)
RPG的错排 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2068 题目大意: 有N个人对应N个名字,然后你去把每一个名字对应到每个人,只要求答对一半 ...
- solr 在windows下的安装
安装环境 Windows 7 64bit Apache-tomcat-8.0.9-windows-x64 Solr-4.9.0 JDK 1.8.0_05 64bit 安装步骤 Tomcat和JDk的安 ...
- CSS3伪类选择器 图示
- 在线程中进行读取并写入文件和wenjia
新人求(胸)罩!!! import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException ...
- dubbo(soa分布式)与cobar(mysql分布式)
http://www.jianshu.com/p/0dde591f21d0 (Dubbo编译不是个顺利的事) Cobar是提供关系型数据库(MySQL)分布式服务的中间件,它可以让传统的数据库得到良好 ...
- python-查询员工信息表
python查询员工信息表 基本要求: 用户可以模糊查询员工信息 显示匹配了多少条,匹配字符需要高亮显示 代码: #!/usr/env python #coding:utf-8 import time ...
- okhttp 常用使用方式 封装 演示
工具介绍 使用: AndroidStudio:[compile 'com.squareup.okhttp3:okhttp:3.4.2']和[compile 'com.zhy:okhttputils:2 ...