Redis 实现消息队列 MQ
Redis 2.4版本之后就内置队列的功能了,如果是日常比较简单的队列应用,可以选择Redis , 效率还很高的!!
Redis 还能实现 有序 和 无序 两种队列(只讨论生产者和消费者这种模式的队列):
一、有序队列:
1、生产者:
$redis = new Redis();
$redis->pconnect('127.0.0.1', 6379);
$redis->zAdd('MQ', 1, 'need to do 1');
$redis->zAdd('MQ', 2, 'need to do 2');2、消费者:
while (true) {
        $pid = pcntl_fork();
        if ($pid == -1) {
            //创建子进程失败,不处理
        } else if ($pid == 0) {
            $redis = new Redis();
            $redis->connect('127.0.0.1', 6379);
            //执行有序查询,取出排序前10进行处理
            $redis->zRevRangeByScore('MQ', '+inf', '-inf', array('withscores'=>false, 'limit'=>array(0,10)));
            exit;
        } else {
            //主进行执行中,等待
            pcntl_wait($status);
        }
}二、无序队列:
1、生产者:
$redis = new Redis();
$redis->pconnect('127.0.0.1', 6379);
$redis->LPUSH('MQ', 1, 'need to do 1');
$redis->LPUSH('MQ', 2, 'need to do 2');2、消费者:
while (true) {
        $pid = pcntl_fork();
        if ($pid == -1) {
            //创建子进程失败,不处理
        } else if ($pid == 0) {
            $redis = new Redis();
            $redis->connect('127.0.0.1', 6379);
            //执行出队处理,BLPOP是阻塞的出队方式,其实还可以用LPOP,不过用lPOP就要自行判断数据是否为空了
            $mq = $redis->BLPOP('MQ')
            //do something
        } else {
            //主进行执行中,等待
            pcntl_wait($status);
        }
}简单版就是这样了~~当然,如果应用规模大,还是建议用正规的MQ,例如:RabbitMQ
Redis 实现消息队列 MQ的更多相关文章
- Redis 做消息队列
		一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式.利用redis这两种场景的消息队列都能够实现.定义: 生产者消费者模式:生产者生产消息放到队列里,多个消费者同时监听队列, ... 
- 为什么会需要消息队列(MQ)?
		为什么会需要消息队列(MQ)? #################################################################################### ... 
- 消息队列一:为什么需要消息队列(MQ)?
		为什么会需要消息队列(MQ)? #################################################################################### ... 
- 详解RPC远程调用和消息队列MQ的区别
		PC(Remote Procedure Call)远程过程调用,主要解决远程通信间的问题,不需要了解底层网络的通信机制. RPC框架 知名度较高的有Thrift(FB的).dubbo(阿里的). RP ... 
- 消息队列MQ简介
		项目中要用到RabbitMQ,领导让我先了解一下.在之前的公司中,用到过消息队列MQ,阿里的那款RocketMQ,当时公司也做了简单的技术分享,自己也看了一些博客.自己在有道云笔记上,做了一些整理,但 ... 
- 程序员过关斩将--redis做消息队列,香吗?
		Redis消息队列 在程序员这个圈子打拼了太多年,见过太多的程序员使用redis,其中一部分喜欢把redis做缓存(cache)使用,其中最典型的当属存储用户session,除此之外,把redis作为 ... 
- java面试记录三:hashmap、hashtable、concurrentHashmap、ArrayList、linkedList、linkedHashmap、Object类的12个成员方法、消息队列MQ的种类
		口述题 1.HashMap的原理?(数组+单向链表.put.get.size方法) 非线程安全:(1)hash冲突:多线程某一时刻同时操作hashmap并执行put操作时,可能会产两个key的hash ... 
- Redis作为消息队列服务场景应用案例
		NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例 一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更 ... 
- redis  resque消息队列
		Resque 目前正在学习使用resque .resque-scheduler来发布异步任务和定时任务,为了方便以后查阅,所以记录一下. resque和resque-scheduler其优点在于功能比 ... 
随机推荐
- unfolding maps支持中文
			由于项目需要,选择了processing+unfolding的方式进行数据可是话的开发,unfolding maps是一个非常强大的地图工具,processing可以灵活自如的表达各种图形/效果.使用 ... 
- SVN配置钩子文件限制提交文件时必须填写更新日志
			进入相应SVN仓库hooks目录,编辑文件pre-commit #!/bin/sh REPOS="$1"TXN="$2" SVNLOOK=/usr/bin/sv ... 
- [转] Entity Framework 无法加载指定的元数据资源。
			Entity Framework 发布以来,本人也一直在用,深感好用,忍不住地要感谢微软啊!由于项目结构创建完成后,没怎么改动过,所以一直没出题过问题,可最近由于改动了下命名空间,问题来了,正是标题中 ... 
- macbook中vagrant升级新版本
			macbook由于缺少卸载机制,有时候不知道该如何升级软件. vagant的升级到时简单,经测试,只需直接官网下载新软件,安装即可. 旧版本不用管,新的会直接替换. 
- [100]tar命令打包(排除目录或文件)
			在linux中可以用tar打包目录以方便传输or备份,我们先来看一个例子 Linux下tar命令exclude选项排除指定文件或目录 test 文件夹有如下文件 [root@lee ~]# ll te ... 
- 如何正确的重写equals() 和 hashCode()方法
			比较两个Java对象时, 我们需要覆盖equals和 hashCode. public class User{ private String name; private int age; priva ... 
- 简单的sqlhelper的学习日志
			一:今天做了一个简单的sqlhelper,还有调用,将今天学的内容总结一下,解决方案如下: 二:对应的sqlhelper的内容: using System; using System.Collecti ... 
- windows 定时任务:schtasks,定时关闭网易云音乐
			大部分属于转载和粘贴. 使用命令:schtasks windows 定时任务 使用样例: 每天定时关闭网易云音乐: 每天22:20关闭网易云音乐: schtasks /create /tn &qu ... 
- python2/3中 将base64数据写成图片,并将图片数据转为16进制数据的方法、bytes/string的区别
			1.python2将base64数据写成图片,并将数据转为16进制字符串的方法 import binascii img = u'R0lGODlhagAeAIcAAAAAAAAARAAAiAAAzABE ... 
- 【Java】HashTable和HashMap区别
			①继承不同 public class Hashtable extends Dictionary implements Map public class HashMap extends Abstract ... 
