首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

redis消息队列,会香吗?

我用的redis的MQ,很简单,一天就写完了 ? ? 订单那么重要的消息,我觉得用redis可能不适合哦!! ? ? ? Redis消息队列 ?...在程序员这个圈子打拼了太多年,见过太多的程序员使用redis,其中一部分喜欢把redis缓存(cache)使用,其中最典型的当属存储用户session,除此之外,把redis作为消息队列使用也不在少数...由于列表的元素操作和消息队列操作类似,所以redis可以适用于消息队列的场景,当然,在适用于的栈的场景下也可以胜任。...如果作为专业的消息队列,一个消息被多个不同的业务消费(一个消息被消费多次)是必须要支持的,但是redis是基于自己的list数据结构来实现的伪队列,所以这种业务场景下就不要考虑redis了,或者自己封装一个类似分发器的中间件也可以...我还是建议不要用redis专业的MQ使用,毕竟MQ这种场景不是redis的设计初衷,但是太多人把redisMQ使用,于是redis的作者基于redis的核心代码实现了一个消息队列:disque,也许未来会作为

52120

redis消息队列

消息队列的特征 消息队列在存取消息时,必须要满足三个需求,分别是 消息保序 处理重复的消息 保证消息可靠性 消息保序 对于 单队列,单进程的queue, 是满足先入先出的特点的,本身是有序的,但是如果有多个队列或多个消费者线程的时候...基于 Streams 的消息队列解决方案: XADD:插入消息,保证有序,可以自动生成全局唯一 ID XREAD:用于读取消息,可以按 ID 读取数据 可靠性 基于 Streams 的消息队列解决方案:...XPENDING 命令可以用来查询每个消费组内所有消费者已读取但尚未确认的消息,而 XACK 命令用于向消息队列确认消息处理已完成 在用Redis当作队列或存储数据时,是有可能丢失数据的:一个场景是,...总的来说,Redis不保证严格的数据完整性和主从切换时的一致性。我们在使用Redis时需要注意。 而采用RabbitMQ和Kafka这些专业的队列中间件时,就没有这个问题了。...如果是金融相关的业务场景,例如交易、支付这类,建议还是使用专业的队列中间件。 用 List 和 Streams 实现消息队列的特点和区别 ?

75920
您找到你想要的搜索结果了吗?
是的
没有找到

redis in action》Redis队列

使用redis任何事情都是基于redis提供的数据结构,那么消息队列有哪几种类型?之前rabbitmq咋说有简单的队列、优先级队列、延迟队列等等。但是那时候咋也没说栈这东西。...那么redis如何这些事,根据之前的学习。肯定使用list了。 Redis队列(先进先出) 队列中我们说redis提供了很多操作队列的方法。可以从左边添加、右边添加、左边获取、右边获取等等等。...考虑到之前list中有lpush,rpush等命令,所以对于简单的优先级队列,我们直接采用这两个命令即可。当然现实的问题是我们的优先级消息可能不是确定的,所以兼容性问题很重要。...故此我们可以根据建立多个优先级list,然后我们在获取消息的时候用多个优先级list去获取。比如brpop list1 list2,其中list1是优先级高的队列。List2是优先级低的队列。...Riedis延迟队列(指定时间执行) Redis延迟队列其实还是用zset去做,我们用当前的时间+需要延迟的时间作为zset的score,然后我们按照score的增序来获取对应的元素,通过判断时间是否小于当前时间然后执行相关的动作

43610

redis实现消息队列

消息队列一般都会想到kafka,rabbitmq,Rockermq, 其实,给你印像缓存的Redis也是能做消息队列. redis消息队列生产者如下: @Service public class MessageQueueRedisProducerServiceImpl...Override public boolean support(String producerType) { return Objects.equals(producerType,"redis..."); } } 其中,只要调用convertAndSend方法就可以产生队列 2 redis消息队列消费者如下: public class MessageQueueRedisConsumerListener...(message.toString()); } } MessageQueueRedisConsumerListener 实现接口MessageListener 的监听,这个主要用于处理获取到的消息数据...类MessageQueueRedisConsumerServiceFactory 主要是用于注册监听器,要监听哪种主题,并这种主题使用哪种数据处理类 至此,redis消息队列已完成.

85220

Redis 消息队列思想

Redis实现消息队列有3中方式 利用Redis的LIST数据结构的有序特性 Pub/Sub 发布订阅模式 Stream LIST消息队列 List数据类型的入口、出口不一致。...可以保证有序性 常用命令 LPUSH与RPOP 或 RPUSH与LPOP是非阻塞式队列 LPUSH与BRPOP 或 RPUSH与BLPOP是阻塞式队列 缺点:无法避免消息丢失(拿到消息后,消息就在队列删除了...,如果宕机,消息相当于没了)、只支持1个消费者(不像广播模式,多个消费者支持消费) Pub/Sub模式 Redis2.0引入的功能,一个发布,全体订阅得到通知 常用命令 SUBSCRIBE channel...)消息堆积有上限 Stream 新的数据类型 Stream是Redis5.0引入的。...p=77&share_source=copy_web&vd_source=164fe0eebbe1de2dc8ea1db9b173c783 本身Redis就不适合做消息队列,放弃了!命令极其复杂!

31820

redis实现消息队列

搬运,redis消息队列的几种方法和优缺点 Redis 怎么消息队列?...那如何,既能及时处理新消息,还能避免 CPU 空转呢? Redis 是否存在这样一种机制:如果队列为空,消费者在拉取消息时就「阻塞等待」,一旦有新消息过来,就通知我的消费者立即处理新消息呢?...这里我们换个角度,从一个消息队列的「使用模型」来分析一下,怎么,才能保证数据不丢? 使用一个消息队列,其实就分为三大块:生产者、队列中间件、消费者。...无论是 Redis 的 Stream,还是专业的队列中间件,例如 RabbitMQ、Kafka,其实都是这么的。 所以,从这个角度来看,Redis 也是合格的。 3) 队列中间件会不会丢消息?...之后又把 Redis 和专业的消息队列中间件做对比,发现 Redis 的不足之处。 最后,我们得出 Redis 队列的合适场景。 这里我也列了一个表格,总结了它们各自的优缺点。

61620

Redis消息队列 | Stream

使用list方式, 缺少ack确认, 不能做广播, 不能分组消费; 使用pub/sub方式, 消息发布后, 客户端不能立刻接收就会丢失消息; 在RedisV5.0的时候, 提供了Stream类型实现队列功能...消息是持久化的, Redis重启时, 消息不会丢失. 1 XADD 向指定队列中添加信息. xadd key [NOMKSTREAM] [MAXLEN|MINID [=|~] threshold [LIMIT...count]] 队列的长度,最小ID等信息; *|ID 消息ID,可以自定义或Redis 自动生成; 自定义生成时, 需要保证单调递增; 使用符号"*"表示由Redis生成; 按时间戳-序号规则生成,...其中时间戳是毫秒级的Redis服务器时间; field value 消息内容, 1个或多个KV键值对; 127.0.0.1:6379> xadd mystream 1 k1 v1 k2 v2 "1-0...可以减轻 Redis服务准确计算队列长度的压力; 127.0.0.1:6379> XTRIM mystream MAXLEN ~ 1000 6 XDEL 删除指定ID消息 127.0.0.1:6379>

1.3K30

Redis实现消息队列及延迟队列

Redis实现消息队列及延迟队列 一、介绍 在选择消息中间件的问题上,我们有很多解决方案,具体选择哪一种还是要根据实际的情况来进行确认。...下面,将进行介绍,如果使用redis作为消息队列,我们该如何编写这段程序。...score保证了队列中的消息有序性,且作为时间戳,所以可以完成延迟队列的对应功能。 注意事项和上面的普通队列差不多,简单注意一下就好。...作为消息队列的优缺点 优点 使用相对简单 不用专门维护专业的消息中间件,降低服务和运维成本 缺点 没有ack,消息确认机制,存在消息丢失的可能 死循环进行监听队列消息队列一多,所需要的线程资源也会增多...,服务器的负担会增大 所以,如果是简单的日志推送,消息推送等,可以使用redis队列

1.6K30

Redis实现消息队列

更多的时候,服务器的额外事情,并不需要客户端等待,这时候就可以把这些额外的事情异步去做。从事异步任务的工具有很多。主要原理还是处理通知消息,针对通知消息通常采取是队列结构。...生产和消费消息进行通信和业务实现。 Redis 队列 Redis提供了两种方式来作消息队列。一个是使用生产者消费模式模式,另外一个方法就是发布订阅者模式。...前者会让一个或者多个客户端监听消息队列,一旦消息到达,消费者马上消费,谁先抢到算谁的,如果队列里没有消息,则消费者继续监听。...后者也是一个或多个客户端订阅消息频道,只要发布者发布消息,所有订阅者都能收到消息,订阅者都是平等的。

68410

利用Redis实现消息队列

什么是消息队列 消息队列(message queue) 可以分为两部分,即消息(message)与队列(queue),它是分布式系统中重要的组件,其通用的使用场景可以简单地描述为: 当不需要立即获得结果...消息队列主要解决了应用耦合、异步处理、流量削锋等问题。...当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等,而部分数据库如Redis、Mysql以及phxsql也可实现消息队列的功能。...遇到的场景 在这里我遇到的场景是: 对于拾光同步发信(点击按钮时立即发信)可能会造成响应过慢或同一时间请求量过大导致的QPS限制,为此我尝试用PHP+Redis设计了一个消息队列服务....开始实现 消息队列的本质和队列结构类似,均为先进先出(FIFO),这里利用到的是redis的List(列表).利用lpush进行入队,然后通过rpop出队. class Mq{ public static

79821

Redis 应用实践-消息队列

Redis是一个功能强大的内存缓存系统,同时也支持一些高级功能,例如发布/订阅、事务、Lua脚本等。其中,Redis也可以作为消息队列使用,以支持异步处理和解耦系统组件。...Redis作为消息队列Redis中,可以使用两种方式实现消息队列:列表和发布/订阅。使用列表可以实现FIFO(先进先出)消息队列,而使用发布/订阅则可以实现广播和多播等高级消息传递模式。...使用列表实现消息队列Redis中,可以使用列表数据类型实现消息队列。假设有两个客户端,一个客户端向列表中推送消息,另一个客户端从列表中获取消息。...推送消息的客户端代码:import redisr = redis.Redis(host='localhost', port=6379, db=0)r.lpush('message_queue', 'message1...使用发布/订阅实现消息队列Redis中,可以使用发布/订阅功能实现消息队列。假设有一个生产者,可以向一个或多个主题发布消息,而一个或多个消费者可以订阅这些主题以获取消息

35230

Redis实现简单消息队列

更多的时候,服务器的额外事情,并不需要客户端等待,这时候就可以把这些额外的事情异步去做。从事异步任务的工具有很多。主要原理还是处理通知消息,针对通知消息通常采取是队列结构。...我们也可以是用redis实现类似的操作。并做一个简单的异步任务。 Redis提供了两种方式来作消息队列。一个是使用生产者消费模式模式,另外一个方法就是发布订阅者模式。...前者会让一个或者多个客户端监听消息队列,一旦消息到达,消费者马上消费,谁先抢到算谁的,如果队列里没有消息,则消费者继续监听。...的pubsub功能,订阅者订阅频道,发布者发布消息到频道了,频道就是一个消息队列。...队列或频道的消息了。

1.2K20

Redis实现简单消息队列

[记录点滴]Redis实现简单消息队列 0x00 摘要 本文提出了一种用Redis实现简单消息队列的方案,适合在资源不足的条件下临时使用。...对消息可靠性要求不高,使用场景是消息容忍丢失,或者说对性能的渴求大于可靠性。 不考虑分组消费,重复消费和广播。 不考虑消息序列顺序。 系统现在已经有Redis缓存。...2.1.1 Redis的问题 因为Redis就不是为消息队列设计的,所以它没有考虑一些消息队列的基本问题: 队列丢东西怎么办?...这种允许一定程度的数据丢失,这种其实也不适合Redis,而且现成的方案有很多,比如fluentd,logstash…… 2.2 Redis消息队列的方案 一般来说有四种方式 基于List的 LPUSH...Lua 脚本 Redis实现消息队列的方案 Redis 怎么消息队列Redis 阻塞、安全队列 BLPOP / BRPOP / LPUSH

92520

Redis应用-异步消息队列与延时队列

异步消息队列 说道消息队列,你肯定会想到Kafka、Rabbitmq等消息中间件,这些专业的消息中间件提供了很多功能特性,当然他的部署使用维护都是比较麻烦的。...如果你对消息队列没那么高要求,想要轻量级的,使用Redis就没错啦。...Redis通过list数据结构来实现消息队列.主要使用到如下命令: lpush和rpush入队列 lpop和rpop出队列 blpop和brpop阻塞式出队列 废话补不多说上代码:...$redis = new Redis(); $redis->connect('127.0.0.1', 6379); //发送消息 $redis->lPush($list, $value); //消费消息...Redis可通过zset来实现。我们可以将有序集合的value设置为我们的消息任务,把value的score设置为消息的到期时间,然后轮询获取有序集合的中的到期消息进行处理。

64320

Redis应用-异步消息队列与延时队列

异步消息队列 说道消息队列,你肯定会想到Kafka、Rabbitmq等消息中间件,这些专业的消息中间件提供了很多功能特性,当然他的部署使用维护都是比较麻烦的。...如果你对消息队列没那么高要求,想要轻量级的,使用Redis就没错啦。...Redis通过list数据结构来实现消息队列.主要使用到如下命令: lpush和rpush入队列 lpop和rpop出队列 blpop和brpop阻塞式出队列 ?...废话补不多说上代码: $redis = new Redis(); $redis->connect('127.0.0.1', 6379); //发送消息 $redis->lPush($list, $value...Redis可通过zset来实现。我们可以将有序集合的value设置为我们的消息任务,把value的score设置为消息的到期时间,然后轮询获取有序集合的中的到期消息进行处理。

66010

kafka队列模式_redis消息队列和mq

一、消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。...目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ 二、消息队列应用场景 以下介绍消息队列在实际应用中常用的使用场景。...(消息队列返回消息接收成功状态后,应用再返回,这样保障消息的完整性) (2)扩展流程(发短信,配送处理)订阅队列消息。采用推或拉的方式获取消息并处理。...处于同一级别,采用拉的方式消费队列中的数据 四、JMS消息服务 讲消息队列就不得不提JMS 。...这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。 如果希望发送的消息可以不被任何处理、或者只被一个消息者处理、或者可以被多个消费者处理的话,那么可以采用Pub/Sub模型。

89130

redis】 属于redis的 “消息队列”:redis stream(浅析)

文章目录 关于 redis stream redis stream 使用示例 添加消息 使用示例 时间复杂度 读取消息 XREAD 时间复杂度 XRANGE 删除消息 XDEL XTRIM...关于 redis stream 这以前只知道redis有类似于消息队列的发布/订阅,还真不知道它居然悄咪咪的有“消息队列”呀哈。...redis stream 实现了大部分消息队列的功能,如: 消息ID的序列化生成 消息遍历 消息的阻塞和非阻塞读取 消息的分组消费 ACK确认机制 发布/订阅 模式不能算是真正意义上的消息队列,它有一定的实时性...,而且没有持久化。...不过redis stream 和卡夫卡之类的消息队列也没法比,毕竟它是在内存里的,小。

1.1K20
领券