消息队列出现的原因

随着互联网的高速发展,门户网站、视频直播、电商领域等web应用中,高并发、大数据已经成为基本的标识。淘宝双11、京东618、各种抢购、秒杀活动、以及12306的春运抢票等,他们这些网站都有一个显著的特点:在短时间内,会涌现出大量的用户(高并发请求),导致并发访问量过大,超过了系统的最大负载能力。一方面可以通过增加服务器数量配置服务器集群实现均衡负载,另外一方面异步操作也被广泛采用。而异步操作中最核心的就是使用消息队列。

消息队列的优点

  • 异步通信,可以向队列里放入很多消息,在你想要的时候再去处理队列消息。
  • 保证数据的可靠性,消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避数据丢失。消息数据处理的删除是在已经确认处理成功后才会删除。
  • 灵活性和可扩展性以及高并发处理能力,消息队列可以缓解数据处理过程,可以动态扩展多系统来处理消息数据。
  • 减少系统相关耦合度,保证了可恢复性。比如生成订单和处理订单,处理系统可以相互独立,当体系的一部分组件失效也不会影响到整个系统。

消息队列之redis的简单应用

结合php,实现redis消息队列的简单应用,主要用到redis三个命令:zAdd、zRange、zDelete。关于这三个命令的含义在此就不再赘述了。

入库操作:

<?php

if(!extension_loaded('redis')){
exit('redis extension is not install!');
}
$redis = new Redis();
$redis->connect('127.0.0.1',6379,300);
$redis->zAdd("order_queue",time(),'11111');
$redis->zAdd("order_queue",time(),'22222');
$redis->zAdd("order_queue",time(),'33333');
$redis->zAdd("order_queue",time(),'44444');
$redis->zAdd("order_queue",time(),'55555'); $arr =$redis->zRange("order_queue",0,$redis->zCard("order_queue"));
print_r($arr);
打印出:
Array
(
[0] => 11111
[1] => 22222
[2] => 33333
[3] => 44444
[4] => 55555
)

出库操作:

<?php

$redis = new Redis;
$redis->connect('127.0.0.1',6379,300); $curvalue = $redis->zRange("order_queue",0,0);
echo "当前值:{$curvalue[0]}\n"; $res=true;
if($res){
$redis->zDelete("order_queue",$curvalue[0]);
echo "队列操作成功\n";
}else{
echo "队列操作失败\n";
}
打印出:
当前值:11111
队列操作成功

redis消息队列简单应用的更多相关文章

  1. logstash解耦之redis消息队列

    logstash解耦之redis消息队列 架构图如下: 说明:通过input收集日志消息放入消息队列服务中(redis,MSMQ.Resque.ActiveMQ,RabbitMQ),再通过output ...

  2. 预热一下吧《实现Redis消息队列》

    应用场景 为什么要用redis?二进制存储.java序列化传输.IO连接数高.连接频繁 一.序列化 这里编写了一个java序列化的工具,主要是将对象转化为byte数组,和根据byte数组反序列化成ja ...

  3. Linux 进程间通信(posix消息队列 简单)实例

    Linux 进程间通信(posix消息队列 简单)实例 详情见: http://www.linuxidc.com/Linux/2011-10/44828.htm 编译: gcc -o consumer ...

  4. Redis 消息队列的实现

    概述 Redis实现消息队列有两种形式: 广播订阅模式:基于Redis的 Pub/Sub 机制,一旦有客户端往某个key里面 publish一个消息,所有subscribe的客户端都会触发事件 集群订 ...

  5. java-spring基于redis单机版(redisTemplate)实现的分布式锁+redis消息队列,可用于秒杀,定时器,高并发,抢购

    此教程不涉及整合spring整合redis,可另行查阅资料教程. 代码: RedisLock package com.cashloan.analytics.utils; import org.slf4 ...

  6. Redis笔记(七)Java实现Redis消息队列

    这里我使用Redis的发布.订阅功能实现简单的消息队列,基本的命令有publish.subscribe等. 在Jedis中,有对应的java方法,但是只能发布字符串消息.为了传输对象,需要将对象进行序 ...

  7. Java实现Redis消息队列

    这里我使用Redis的发布.订阅功能实现简单的消息队列,基本的命令有publish.subscribe等. 在Jedis中,有对应的java方法,但是只能发布字符串消息.为了传输对象,需要将对象进行序 ...

  8. 【转】redis 消息队列发布订阅模式spring boot实现

    最近做项目的时候写到一个事件推送的场景.之前的实现方式是起job一直查询数据库,看看有没有最新的消息.这种方式非常的不优雅,反正我是不能忍,由于羡慕本身就依赖redis,刚好redis 也有消息队列的 ...

  9. .net core Redis消息队列中间件【InitQ】

    前言 这是一篇拖更很久的博客,不知不觉InitQ在nuget下载量已经过15K了,奈何胸无点墨也不晓得怎么写(懒),随便在github上挂了个md,现在好好唠唠如何在redis里使用队列 队列缓存分布 ...

随机推荐

  1. Bundle包的制作与使用

    一.清爽Bundle模式(在应用工程中创建Bundle的子文件夹,而非在Bundle项目中): 1.新建Bundle包 2.生成Bundle包,并拖入项目中,然后"右键显示包内容" ...

  2. 国产方法论之 ReDoIt -- 惟思捷

    最近上了PMP课程,感觉受益匪浅,思路有被打开. 很同意一个观点“国人很擅长做事,但是不擅长总结出解决问题的通用框架和方法论”. 为了能提高中小企业生产力我最近成了一个小的软件咨询公司取名“惟思捷”, ...

  3. 使用virtualenv搭建python3开发环境

    问题描述 环境: CentOS6.5 想在此环境下使用python3进行开发,但CentOS6.5默认的python环境是2.6.6版本. 之前的做法是直接从源码安装python3,替换掉现有的开发环 ...

  4. java、easyui-combotree树形下拉选择框

    最近一直在研究这个树形的下拉选择框,感觉非常的有用,现在整理下来供大家使用: 首先数据库的表架构设计和三级菜单联动的表结构是一样,(父子关系) 1.下面我们用hibernate建一下对应的额实体类: ...

  5. 添加WoSign根证书到JDK

    由于某些“众所周知”的原因,Azure中国版使用了国内的WoSign证书——和臭名昭著的CNNIC有的一拼.Apple是不信任WoSign证书的,这也是为什么用Mac OS中访问www.azure.c ...

  6. Markdown简介以及常用语法

    Markdown简介以及常用语法 最近发现用markdown记录东西很方便,感觉和emacs的org mode很类似,但是windows下使用emacs不是很方便.特此记录一下markdown常用的语 ...

  7. 记一次与a标签相遇的小事

    最近做的一个项目,按钮使用的是a标签做的,样子还不错.不过正是这个a标签把我坑死了,有一个场景是点击a标签去调后台服务,为了防止用户频繁点击按钮提交,在去请求后台服务的时候肯定要先把按钮的事件给禁止掉 ...

  8. java 静态内部类小总结

    内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权 ...

  9. [LeetCode] Fizz Buzz 嘶嘶嗡嗡

    Write a program that outputs the string representation of numbers from 1 to n. But for multiples of ...

  10. [LeetCode] Android Unlock Patterns 安卓解锁模式

    Given an Android 3x3 key lock screen and two integers m and n, where 1 ≤ m ≤ n ≤ 9, count the total ...