<?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消息队列类的更多相关文章

  1. php-beanstalkd消息队列类分享

    <?php namespace Common\Business; /** * beanstalk: A minimalistic PHP beanstalk client. * * Copyri ...

  2. PHP memcache实现消息队列实例

    现在,memcache于server缓存广泛应用.下面我来介绍一下memcache消息队列中等待的样本实现,有需要了解的朋友可以参考. memche消息队列原则key上做文章.后消息或者日志. 然后通 ...

  3. ActiveMQ消息队列和SignalR之日志实时监控及警报小实例

    主要技术: log4net-生成日志. ActiveMQ-生成日志的时候发送消息,并实时监控日志. SignalR-将ActiveMQ监控的日志实时显示到浏览器上,而不用刷新浏览器. 小实例介绍: 左 ...

  4. C# 模拟一个处理消息队列的线程类 Message Queue

    // 模拟一个处理消息队列的类 class MessageHandler { // 消息队列 private Queue<string> messageQue = new Queue< ...

  5. java面试记录三:hashmap、hashtable、concurrentHashmap、ArrayList、linkedList、linkedHashmap、Object类的12个成员方法、消息队列MQ的种类

    口述题 1.HashMap的原理?(数组+单向链表.put.get.size方法) 非线程安全:(1)hash冲突:多线程某一时刻同时操作hashmap并执行put操作时,可能会产两个key的hash ...

  6. RabbitMQ消息队列帮助类

    调用 //消息队列发消息 MqConfigInfo config = new MqConfigInfo(); config.MQExChange = "DrawingOutput" ...

  7. Beanstalkd消息队列 -- php类Pheanstalk使用

    业务场景 商城订单生成30分钟后 如果未支付关闭订单 解决办法 可以使用延迟消息队列   这里我们用的是beanstalkd Beanstalkd介绍 Beanstalk,一个高性能.轻量级的分布式内 ...

  8. 消息队列工具类(MSMQ)

    所要做的是简化msmq的调用代码以及做到可替代性,实现后,调用消息队列代码变为如下所示: QueueService srv = QueueService.Instance(); //检查存储DTO1的 ...

  9. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

随机推荐

  1. nginx在mac下的安装与基本操作

    1. 安装 brew install nginx(需要安装homebrew) 2. 执行  nginx 直接启动nginx服务 3. nginx -s  reload/stop 4. 配置地址 sud ...

  2. [Sequence Alignment Methods] Smith–Waterman algorithm

    Smith–Waterman algorithm 首先需要澄清一个事实,Smith–Waterman algorithm是求两个序列的最佳subsequence匹配,与之对应的算法但是求两个序列整体匹 ...

  3. Jenkins 八: 构建Git项目

    1. 安装git. http://git-scm.com/download/win 下载之后一步步安装即可.   2. 安装插件. 打开"系统管理" –> "管理插 ...

  4. python-从redis数据库中读数据

    读string,list,set,sort_set,hash类型的数据 import redis class DataBase: def __init__(self, host, port): sel ...

  5. [转载]Android利用convertView优化ListView性能

    本的getView写法 Java代码public View getView(int position, View convertView, ViewGroup parent) {View view = ...

  6. HighCharts 具体使用及API文档说明

    一.HighCharts开发说明: HighCharts开发实际上配置HighCharts每一个部分,比方配置标题(title),副标题(subtitle)等,当中每一个部分又有更细的參数配置,比方标 ...

  7. uva 116 Unidirectional TSP (DP)

    uva 116 Unidirectional TSP Background Problems that require minimum paths through some domain appear ...

  8. [转] socket异步编程--libevent的使用

    这篇文章介绍下libevent在socket异步编程中的应用.在一些对性能要求较高的网络应用程序中,为了防止程序阻塞在socket I/O操作上造成程序性能的下降,需要使用异步编程,即程序准备好读写的 ...

  9. 屏幕录像专家V7.5(完美破解版,无水印)下载

    分享一个屏幕录像工具.屏幕录像专家V7.5(完美破解版,无水印).经测试可破解使用. 破解注册 点击安装.EXE,安装软件. 点击安装好的屏幕录像专家,会给你一个机器码,要你注册,复制下这个机器码(下 ...

  10. Oracle sequence排序的使用

    最近公司的项目中好多用到了Seq排序的,所以网上找些记录一下吧. 通过以下直接查询出所有的seq列表: select * from user_sequences; 查询结果如下: 查询结果和创建的基本 ...