redis消息队列简单应用
消息队列出现的原因
随着互联网的高速发展,门户网站、视频直播、电商领域等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消息队列简单应用的更多相关文章
- logstash解耦之redis消息队列
logstash解耦之redis消息队列 架构图如下: 说明:通过input收集日志消息放入消息队列服务中(redis,MSMQ.Resque.ActiveMQ,RabbitMQ),再通过output ...
- 预热一下吧《实现Redis消息队列》
应用场景 为什么要用redis?二进制存储.java序列化传输.IO连接数高.连接频繁 一.序列化 这里编写了一个java序列化的工具,主要是将对象转化为byte数组,和根据byte数组反序列化成ja ...
- Linux 进程间通信(posix消息队列 简单)实例
Linux 进程间通信(posix消息队列 简单)实例 详情见: http://www.linuxidc.com/Linux/2011-10/44828.htm 编译: gcc -o consumer ...
- Redis 消息队列的实现
概述 Redis实现消息队列有两种形式: 广播订阅模式:基于Redis的 Pub/Sub 机制,一旦有客户端往某个key里面 publish一个消息,所有subscribe的客户端都会触发事件 集群订 ...
- java-spring基于redis单机版(redisTemplate)实现的分布式锁+redis消息队列,可用于秒杀,定时器,高并发,抢购
此教程不涉及整合spring整合redis,可另行查阅资料教程. 代码: RedisLock package com.cashloan.analytics.utils; import org.slf4 ...
- Redis笔记(七)Java实现Redis消息队列
这里我使用Redis的发布.订阅功能实现简单的消息队列,基本的命令有publish.subscribe等. 在Jedis中,有对应的java方法,但是只能发布字符串消息.为了传输对象,需要将对象进行序 ...
- Java实现Redis消息队列
这里我使用Redis的发布.订阅功能实现简单的消息队列,基本的命令有publish.subscribe等. 在Jedis中,有对应的java方法,但是只能发布字符串消息.为了传输对象,需要将对象进行序 ...
- 【转】redis 消息队列发布订阅模式spring boot实现
最近做项目的时候写到一个事件推送的场景.之前的实现方式是起job一直查询数据库,看看有没有最新的消息.这种方式非常的不优雅,反正我是不能忍,由于羡慕本身就依赖redis,刚好redis 也有消息队列的 ...
- .net core Redis消息队列中间件【InitQ】
前言 这是一篇拖更很久的博客,不知不觉InitQ在nuget下载量已经过15K了,奈何胸无点墨也不晓得怎么写(懒),随便在github上挂了个md,现在好好唠唠如何在redis里使用队列 队列缓存分布 ...
随机推荐
- html如何和CSS联系起来
CSS <Cascading Style Sheet>层叠样式表 .级联样式表,用于控制Web页面的外观: Html中使用CSS下面讲述2种常用方法: 1.连接式:可以实现CSS和Ht ...
- SE Springer小组《Spring音乐播放器》软件需求说明3
3 需求规定 3.1对功能的规定 基本功能与相关的输入输出如下表所示.歌曲播放.停止.暂停等功能调用MCI库,数据在MCI库下如何运作与用户的直观感受无关,就不具体列出. 输入 处理 输出 用户登录信 ...
- [Erlang 0115] 2014值得期待的Erlang两本新书
在2014年的开头就有这样一个令人振奋的好消息,Erlang有一本新书即将出版 <The Erlang Runtime System>,其作者happi在2013年3月份公布了这本书的写作 ...
- Hibernate 系列 03 - 使用Hibernate完成持久化操作
引导目录: Hibernate 系列教程 目录 康姆昂,北鼻,来此狗.动次打次,Hibernate继续走起. 目录: 使用Hibernate实现按主键查询 使用Hibernate实现数据库的增.删.改 ...
- (二)Spark-Linux环境准备-Java&Python版Spark
Spark-Linux环境准备 视频教程: 1.优酷 2.YouTube 硬软件环境 1.虚拟机:VMware Workstation 12 2.虚拟机操作系统:RedHat5u4,单核,1G内存,2 ...
- 关于Android中new Notification
目前 Android 已经不推荐使用下列方式创建 Notification实例: Notification notification = new Notification(R.drawable.ic_ ...
- kvm常用操作
安装一些虚拟化的组件 yum -y install kvm python-virtinst libvirt bridge-utils virt-manager qemu-kvm-tools virt- ...
- spring squertz定时任务
spring squertz是一个强大的定时任务处理方式 1.需要的Jar quartz-1.8.5.jar commons-logging.jar spring-core-3.0.5.RELEASE ...
- 刷新页面时 select值保持不变
刷新页面时,要使下拉菜单(select).raido保持不变,用ajax是无法实现的.我想只能通过cookies才能实现.刷新前先把select或radio的值保存在cookies中,刷新后再填回去. ...
- JS-- 浮点数运算处理
一. 问题描述 最近在做一个项目,页面上会存在一些JS浮点数的运算,发现JS浮点数运算存在一些bug.譬如: 0.1+0.2 == 0.30000000000000004 0.1 + 0.7 ...