了解redis队列原理
redis队列
# 一、redis队列? redis的发布订阅模式 发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。 Redis的发布订阅模式本质和传统的MQ的发布订阅类似,但是相对于其它几款MQ产品来说, redis的使用更加便捷,也更加轻量化,不需要单独去搭建集成一套繁重的MQ框架。 但缺点也很明显,redis发布的消息不会持久化,所以当某一台服务器出现问题的时候, 这个消息会丢失,所以在考虑使用之前要慎重,当前的业务是否对数据一致性要求很高,如果要求很高,还是建议使用MQ产品。
介绍redis命令:
SUBSCRIBE,用于订阅信道PUBLISH,向信道发送消息UNSUBSCRIBE,取消订阅 用于退订给定的一个或多个频道的信息。 语法: UNSUBSCRIBE channel
这种模式有如下的优缺点:
优点
典型的广播模式,一个消息可以发布到多个消费者
多信道订阅,消费者可以同时订阅多个信道,从而接收多类消息
消息即时发送,消息不用等待消费者读取,消费者会自动接收到信道发布的消息
缺点
消息一旦发布,不能接收。换句话就是发布时若客户端不在线,则消息丢失,不能寻回
不能保证每个消费者接收的时间是一致的
若消费者客户端出现消息积压,到一定程度,会被强制断开,导致消息意外丢失。通常发生在消息的生产远大于消费速度时
可见,Pub/Sub 模式不适合做消息存储,消息积压类的业务,而是擅长处理广播,即时通讯,即时反馈的业务。
思考如果我们使用这种模式让api服务作为消息的发布者(pub)而所有的server作为服务的订阅者(sub)可不可以,为什么?
明显如果每个服务都接收到了请求,就会出现短信重复发送的情况,这不是我们期望的效果
lpush、lpop、rpush、rpop、lrange
Lpush 命令将数据插入到队列头部
格式:
LPUSH key “数据”
Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。
格式:
Rpush key “数据”
Lpop 命令用于移除并返回列表的第一个元素
格式:
Lpop key
Rpop 命令用于移除列表的最后一个元素,返回值为移除的元素
格式:
RPOP key
Lrange 返回列表中指定区间内的元素,可以指定一个区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1表示列表的第二个元素,以此类推也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。格式:LRANGE key START END
首先我们来看一个现象,当我们通过lpop命令或rpop命令从一个空的队列中获取数据
我们看到如果队列是空的 通过lpop和rpop命令直接返回了空
我们思考对于我们的系统来说有没有问题a)api服务接收到数据后通过lpush命令往key中添加数据b)server服务通过rpop命令从队列中获取数据有没有问题?为什么?存在什么问题,资源浪费问题如何解决?介绍blpop,brpopblpop、brpop:相比于rpop和lpop多了b(b代表blocking)及阻塞的意思,阻塞读在队列没有数据的时候进入休眠状态,当队列为空时,lpop和rpop会一直空轮训,消耗资源;所以引入阻塞读blpop和brpop(b代表blocking),阻塞读在队列没有数据的时候进入休眠状态,一旦数据到来则立刻醒过来,消息延迟几乎为零。
了解redis队列原理相关推荐
- redis队列优先级java实现_Redis 实现队列原理的实例详解
Redis 实现队列原理的实例详解 场景说明: ·用于处理比较耗时的请求,例如批量发送邮件,如果直接在网页触发执行发送,程序会出现超时 ·高并发场景,当某个时刻请求瞬间增加时,可以把请求写入到队列,后 ...
- redis单线程原理___Redis为何那么快-----底层原理浅析
redis单线程原理 redis单线程问题 单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程. 1. 为什么说redis能够快速执行 ...
- Redis内核原理及读写一致企业级架构深入剖析1-综合组件环境实战
本套技术专栏是作者(秦凯新)平时工作的总结和升华,并深度整理大量网上资源和专业书籍.通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客.QQ ...
- 深入理解redis复制原理
深入理解redis复制原理 1.复制过程 2.数据间的同步 3.全量复制 4.部分复制 5.心跳 6.异步复制 1.复制过程 从节点执行 slaveof 命令. 从节点只是保存了 slaveof 命令 ...
- 高性能分布式缓存redis(持久化原理 安全策略 过期删除内存淘汰策略 性能压测 高可用 Redis Cluster)
redis redis(持久化原理 安全策略 过期删除&内存淘汰策略 性能压测 高可用 Redis Cluster) 1. 持久化原理 1.1 持久化流程(落盘) 1.2 RDB详解 1.2. ...
- 基于 Kafka 和 ZooKeeper 的分布式消息队列原理
转载:https://gitbook.cn/books/5bc446269a9adf54c7ccb8bc/index.html 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量 ...
- 再谈基于 Kafka 和 ZooKeeper 的分布式消息队列原理
关于分布式消息队列,我在几个月前写过一篇文章:<深入浅出理解基于 Kafka 和 ZooKeeper 的分布式消息队列 >.最近,由于写作课程<分布式中间件实践之路>的契机,我 ...
- Redis实战原理解析
Redis简介:Redis 是完全开源免费的,是一个高性能的key-value数据库,目前市面上主流的no-sql数据库有Redis.Memcache.Tair(淘宝自研发),Redis的官网:htt ...
- Redis核心原理与应用实践
Redis核心原理与应用实践 在很多场景下都会使用Redis,但是到了深层次的时候就了解的不是那么深刻,以至于在面试的时候经常会遇到卡壳的现象,学习知识要做到系统和深入,不要把Redis想象的过于复杂 ...
最新文章
- 人工智能尴尬的2019:需要钱却没钱可烧了
- linux svn missingargument -m,缺少參數-m在windows powershell中使用svn。
- php设置ip,使用PHPIP的IP管理
- C#实现窗口最小化到系统托盘
- samtools idxstats
- nginx配置websocket_Ingress-nginx代理websocket
- Visual Editor插件下载、安装问题(Eclipse3.1.1)
- SpringCloud 微服务网关Gateway 动态路由配置
- 【李宏毅机器学习】Tips for Deep Learning(p14) 学习笔记
- json格式化和查看工具
- docker添加新的环境变量_DockerFile 设置环境变量
- Python3.5爬取cbooo.cn数据并且同步到mysql中
- python webp图片转化格式
- java调用存储过程 sql server,Sql Server的存储过程与Java代码相连接调用(二)
- TensorFlow学习笔记(4)——TensorFlow实现GloVe
- 闭关的日子 好无聊。偷了半日闲去书店shopping一下
- html转pdf之使用Paged.js加页眉页脚
- EasyGBS对接宇视SDK,多次点击录像回放出现崩溃是什么原因?
- HTML页面之间传递Json格式数组的方式
- 模拟人类大脑每秒计算数量级及参数容量的估计