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个基本的消息发送/接收模型, ...
随机推荐
- Response.End(); 用HttpContext.Current.ApplicationInstance.CompleteRequest 代替
Response.End(); 会报异常 HttpContext.Current.ApplicationInstance.CompleteRequest 这里有个讨论的帖子很有意思:http://q. ...
- bzoj 3158 千钧一发(最小割)
3158: 千钧一发 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 767 Solved: 290[Submit][Status][Discuss] ...
- Bellman-Bord(贝尔曼-福特)
include const int inf=0x3f3f3f3f; int main() { int m,n; scanf("%d%d",&n,&m); int u ...
- CodeForces 220(div 2)
悲剧的div2..... A 题意:在n * m的矩形平面直角坐标系中,从(x, y)可以到四个点(x - a, y - b),(x + a, y - b),(x - a, y + b),(x + a ...
- winscp自动执行脚本
我们经常使用WinSCP工具通过sftp协议上传获取文件,本文描述通过bat批量处理文件. 首先,我们打开dos命令窗口使用 cd \d :D\WinSCP 打开WinSCP安装目录 上传文件: wi ...
- 理解Java NIO
基础概念• 缓冲区操作缓冲区及操作是所有I/O的基础,进程执行I/O操作,归结起来就是向操作系统发出请求,让它要么把缓冲区里的数据排干(写),要么把缓冲区填满(读).如下图• 内核空间.用户空间 上图 ...
- Let it Bead
http://poj.org/problem?id=2409 // File Name: poj2409.cpp // Author: bo_jwolf // Created Time: 2013年1 ...
- 从XML文件乱码问题,探寻其背后的原理
出现应用程序读取XML文件乱码的场景: 加入xml文件以<?xml version="1.0" encoding="utf-8" ?> 格式的:如果 ...
- TextView的ems和MaxLength
<EditText android:id="@+id/et_code" android:layout_width="wrap_content" andro ...
- UVA 11212 IDA*
移动一块连续的区间使得数列递增.问最少次数. 直接IDA*暴搜,只是我没有想到A*函数,所以就随手写了个连续递增块数作为估价函数,WA了,然后除以2,还是WA,除以3,WA,除以4...过了= = # ...