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队列原理相关推荐

  1. redis队列优先级java实现_Redis 实现队列原理的实例详解

    Redis 实现队列原理的实例详解 场景说明: ·用于处理比较耗时的请求,例如批量发送邮件,如果直接在网页触发执行发送,程序会出现超时 ·高并发场景,当某个时刻请求瞬间增加时,可以把请求写入到队列,后 ...

  2. redis单线程原理___Redis为何那么快-----底层原理浅析

    redis单线程原理 redis单线程问题 单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程. 1. 为什么说redis能够快速执行 ...

  3. Redis内核原理及读写一致企业级架构深入剖析1-综合组件环境实战

    本套技术专栏是作者(秦凯新)平时工作的总结和升华,并深度整理大量网上资源和专业书籍.通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客.QQ ...

  4. 深入理解redis复制原理

    深入理解redis复制原理 1.复制过程 2.数据间的同步 3.全量复制 4.部分复制 5.心跳 6.异步复制 1.复制过程 从节点执行 slaveof 命令. 从节点只是保存了 slaveof 命令 ...

  5. 高性能分布式缓存redis(持久化原理 安全策略 过期删除内存淘汰策略 性能压测 高可用 Redis Cluster)

    redis redis(持久化原理 安全策略 过期删除&内存淘汰策略 性能压测 高可用 Redis Cluster) 1. 持久化原理 1.1 持久化流程(落盘) 1.2 RDB详解 1.2. ...

  6. 基于 Kafka 和 ZooKeeper 的分布式消息队列原理

    转载:https://gitbook.cn/books/5bc446269a9adf54c7ccb8bc/index.html 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量 ...

  7. 再谈基于 Kafka 和 ZooKeeper 的分布式消息队列原理

    关于分布式消息队列,我在几个月前写过一篇文章:<深入浅出理解基于 Kafka 和 ZooKeeper 的分布式消息队列 >.最近,由于写作课程<分布式中间件实践之路>的契机,我 ...

  8. Redis实战原理解析

    Redis简介:Redis 是完全开源免费的,是一个高性能的key-value数据库,目前市面上主流的no-sql数据库有Redis.Memcache.Tair(淘宝自研发),Redis的官网:htt ...

  9. Redis核心原理与应用实践

    Redis核心原理与应用实践 在很多场景下都会使用Redis,但是到了深层次的时候就了解的不是那么深刻,以至于在面试的时候经常会遇到卡壳的现象,学习知识要做到系统和深入,不要把Redis想象的过于复杂 ...

最新文章

  1. 人工智能尴尬的2019:需要钱却没钱可烧了
  2. linux svn missingargument -m,缺少參數-m在windows powershell中使用svn。
  3. php设置ip,使用PHPIP的IP管理
  4. C#实现窗口最小化到系统托盘
  5. samtools idxstats
  6. nginx配置websocket_Ingress-nginx代理websocket
  7. Visual Editor插件下载、安装问题(Eclipse3.1.1)
  8. SpringCloud 微服务网关Gateway 动态路由配置
  9. 【李宏毅机器学习】Tips for Deep Learning(p14) 学习笔记
  10. json格式化和查看工具
  11. docker添加新的环境变量_DockerFile 设置环境变量
  12. Python3.5爬取cbooo.cn数据并且同步到mysql中
  13. python webp图片转化格式
  14. java调用存储过程 sql server,Sql Server的存储过程与Java代码相连接调用(二)
  15. TensorFlow学习笔记(4)——TensorFlow实现GloVe
  16. 闭关的日子 好无聊。偷了半日闲去书店shopping一下
  17. html转pdf之使用Paged.js加页眉页脚
  18. EasyGBS对接宇视SDK,多次点击录像回放出现崩溃是什么原因?
  19. HTML页面之间传递Json格式数组的方式
  20. 模拟人类大脑每秒计算数量级及参数容量的估计

热门文章

  1. 实现中文字符串截取无乱码的方法
  2. Matlab中s函数的使用
  3. 项目实战4: 基于 SpringBoot 的超市账单管理系统
  4. 华为云计算IE笔试笔记
  5. ARIMA实现(亲测可用)
  6. java集合体检套餐管理系统_基于ssm vue的综合项目 健康体检管理系统-第六章
  7. swagger无法正确显示属性描述缺失或者错误显示
  8. 学习lucene.net的好网站(不断添加)
  9. php mysql知识总结,PHP MySQL基础知识
  10. 高级Spring: AOP 实现之 ajc 编译器