RabbitMQ RabbiMQ是AMQP(高级消息队列协议)的消息中间件的一种,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗,主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层。保存这个数据。Redis队列 redis队列是一个是一个Key-Value的NoSQL数据库,开发维护很活跃,虽然它是一个Key-Valu
转载
2023-06-13 15:50:33
132阅读
一、算法思想 优先队列的原理本质上就是利用完全二叉树的结构实现以log2n的时间复杂度删除队列中的最小对象(这里以小堆顶为例)。完全二叉树又可以通过数组下标实现索引,当插入一个对象的时候,利用上浮操作更新最小对象。当删除堆顶最小对象时,将末尾的对象放置到堆顶上,然后执行下沉操作。 优先队列有一个缺点
转载
2020-09-08 14:58:00
493阅读
2评论
Redis用双链表list实现队列的LPUSH key value [value ...] 将一个或多个值 value 插入到列表 key 的表头 如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头: 比如说,对空列表 mylist 执行命令 LPUSH mylist a b c ,列表的值将是 c b a ,这等同于原子性地执行 LPUSH mylist a 、
转载
2024-08-07 13:10:59
34阅读
1、优势:松耦合
易于扩展 ,消费者可以扩展多个,分布在不同的服务器中 2、LPUSH RPOP 3、BRPOP命令和RPOP相似,唯一区别:当列表中没有元素时,BRPOP命令会一直阻塞住链接,知道有新元素加入 4、BRPOP key timeout &n
转载
2023-07-21 23:43:32
86阅读
一、Redis1、简介Redis 与其他 key - value 缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis支持数据的备份,即master-slave模式的数据备份。2、优势性能极高 –
转载
2023-09-15 10:23:43
50阅读
事务Redis 通过 WATCH、MULTI、EXEC、DISCARD 命令实现事务功能。使用命令队列(FIFO)保存客户端发送的命令,并一次性、按顺序地执行队列里的命令,知道执行完毕。例如:// 开始事务
redis> multi
OK
// 命令入队
redis> set name "傅园慧"
QUEUED
// 命令入队
redis> set age 20
QUEUED
转载
2023-08-04 19:30:14
171阅读
延迟队列的应用场景也很常见,例如:session的超时过期、自动取消未付款订单等等。redis中有一种数据结构叫做zset,即有序集合。元素类型为String类型,且元素具有唯一性不能重复,每个元素可附带float类型的score即分值。从zset中获取元素的时候可以通过分值进行排序后获取某个分值范围内的元素或所有元素。public class DelayQueue {
private
转载
2023-08-01 15:24:21
126阅读
消息队列用途:解耦,异步,消峰。 redis实现消息队列的方式:使用List作为key。(先进先出) 实现方法:①lpush,rpop 非阻塞式 ②lpush,brpop 阻塞式 注:柱塞式队列–当队列为空/满时,无法从队列中删除/增加元素。(所谓阻塞:在某种情况下,线程被挂起,直到触发满足条件自动唤醒线程)语法样式1:(实现优先级消息队列) redis 192.168.8.123>brpo
转载
2023-05-25 11:57:49
109阅读
首先找到第一个切入口,redis的列表类型有两个命令LPUSH和RPOP,LPUSH命令可以让元素从左侧进入队列,RPOP命令可以让元素从右侧弹出。这样两个命令配合使用就形成了左边进,右边出的形式,间接实现了队列的功能。生产者通过LPUSH命令添加任务到某个键中,消费者通过RPOP命令不断从该键中取出任务。这时候问题来了,消费者怎么知道啥时有任务?消费者只能不断循环的读取键对应的队列,如果有任务就
转载
2023-07-08 15:11:51
107阅读
重复消费问题:为了解决消费端因为种种原因而造成的消息丢失问题,我们都知道根源在于因为RabbitMQ的自动ack机制,所以为了避免以上问题,我们会选中手动ack,以确保消息不会因为某些原因而丢失。但随之而来的也有一个问题:如果忘记ack,或者又因为种种原因消费者端没能给RabbitMQ对应ack,无法确认消息已经被消费完了,那这条未被“约束”的消息也许就会被另一个消费者消费,就会造成重复消费问题如
转载
2023-08-15 15:47:52
122阅读
现在用的消息队列主要有kafka,rabbitmq和redis。相比另外两个,用redis做消息队列的优点是吞吐量高,延迟低,简单易用,易于部署和运维。缺点是没有ACK机制,可靠性方面不足。 本次用swoole + redis 来模拟个消息推送系统。思路1. 某个业务调用消息接口,将内容和对应的uid存入redis列表中,key为msg。 2. 用户连接swoole后,会有个fd来标识这个会话,
转载
2023-08-01 14:33:16
138阅读
(一)任务对立的好处 1.公耦合,生产者和消费者无需知道批次实现的细节,只需要决定好任务的描述格式, 这使得生产者和消费则都不同额 团队使用不同的语言编写。 2.已于扩展:消费者可以有多个,而且分布在不同的机器上,可以轻易的降低单台服务器的负载。(二)使用redis实现简单的任务队列(生产者消费者模型) 生产者命令:LPUSH key alue[....] RP
转载
2023-08-15 16:13:39
64阅读
RabbitMQ简介AMQP:Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。RabbitMQ 是一个由Erlang语言开发的AMQP的开源实现。(PS:前几天有篇文章介绍了阿里P10的淘宝褚霸,就是erlang大神)。支持多种客户端。用于在分布式系统中
一、概述在处理Web客户端发送的命令请求时,某些操作的执行时间可能会比我们预期的更长一些。通过将待执行的相关信息放入队列里面,并在之后对队列进行处理,用户可以推迟执行那些需要一段时间才能完成的操作,这种将工作交给任务管理器来执行的做法称为任务队列。例如:很多网站中都会有发送邮件的这个功能,发送邮件是一个双向数据的交互过程,如果使用单线程实现,很难避免会等待很长时间的情况出现,但碍于某些框架或语言不
转载
2023-06-06 22:55:08
300阅读
Redis 数据类型 StreamRedis 常用命令,思维导图 >>>Redis Stream 是 Redis 5.0 版本新增加的数据结构。Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等
转载
2023-07-09 19:07:57
0阅读
队列:先进先出redis队列:Redis不仅可作为缓存服务器,还可用作消息队列。它的列表类型天生支持用作消息队列。由于Redis的列表是使用双向链表实现的,保存了头尾节点,所以在列表头尾两边插取元素都是非常快的。
所以可以直接使用redis的list实现消息队列,只需简单的两个指令lpush和rpop或者rpush和lpop。rabbitmq使用参考网址:利用Python学习RabbitMQ消息
转载
2023-06-26 21:41:02
126阅读
在保证了rocketMQ的消息顺序性之后,还应该进行消息去重。由于消息的重复性往往是由于网络抖动造成的,所以我们一般要在自己的业务端完成消息的去重。一个可用的方案就是使用Redis做缓存。具体方案如下:1.消费端收到消息的时候,使用Redis提供的incr,以msgID作为key(保证唯一性),value默认从1开始递增;2.当incr返回值为1的时候,设置其失效时间为2分钟,并且要注意,该消息需
转载
2023-07-04 14:54:13
164阅读
一、消息队列的三个要求消息有序执行(有序性);由于网络阻塞等原因,消息不会被重复执行(幂等性);宕机后,消息不会丢失(可靠性)。二、Redis实现消息队列Redis中可以使用List或者Streams两种数据结构来满足以上消息队列的要求List有序性: list本身就是先进先出,天然支持有序性(高并发时需要多个消息队列,每个队列保存同一个服务的消息,对应消费该服务消息的消费者);幂等性: 生产者在
转载
2023-08-15 07:02:57
106阅读
一、消息队列简介消息队列(Message Queue),字面意思就是存放消息的队列。最简单的消息队列模型包括 3 个角色:消息队列:存储和管理消息,也被称为消息代理(Message Broker)生产者:发送消息到消息队列消费者:从消息队列获取消息并处理消息 消息队列和阻塞队列的区别: ① 消息队列是在 JVM 以外的独立服务,所以不受 JVM 内存的限制 ② 消息队列不仅仅做数据存储,还需要确保
转载
2023-07-09 15:51:07
1095阅读
目前在redis想要实现消息队列的功能有如下的两种方案:1:基于List的lpush和rpop
2:Streams这里不将pub/sub考虑在内,因为其不具备持久化的能力,消息会丢失。其中1是利用其有的先进先出特性实现,2是redis为了实现消息队列专门在redis5版本中定义的一种新的数据结构,这里注意,其也是一种数据结构,和String,Set等处于同等位置的数据结构,只不过内部增加了一些针对
转载
2023-08-30 08:32:03
75阅读