Redis除了做缓存,还能做什么分布式锁 : 可以基于 Redisson 来实现分布式锁。限流 :可以通过 Redis + Lua 脚本的方式来实现限流。消息队列Redis 自带的 list 数据结构可以作为一个简单的队列使用,Redis5.0 中增加的 Stream 类型的数据结构更加适合用来做消息队列。复杂业务场景 :通过 Redis 以及 Redis 扩展提供的数据结构,可以很方便地完成
Redis 队列与 StreamRedis5.0 最大的新特性就是多出了一个数据结构 Stream,它是一个新的强大的支持多播的可持久化的消息队列,作者声明 Redis Stream 地借鉴了 Kafka 的设计。 Redis Stream 的结构如上图所示,每一个Stream都有一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的 ID 和对应的内容。消息是持久化的,Redis 重启后
转载 2023-07-17 16:20:26
243阅读
1点赞
# Java Redis延迟队列实现 ## 引言 延迟队列是一种常见的队列实现,用于处理需要延迟执行的任务。它可以根据任务的延迟时间,将任务按照一定的顺序进行排列,确保在指定的延迟时间后执行。 Redis是一个开源的高性能内存数据库,它提供了强大的数据结构和丰富的操作命令。利用Redis的有序集合和过期功能,我们可以很容易地实现一个Java版的延迟队列。 在本文中,我们将介绍如何使用Jav
原创 2023-09-02 09:41:26
219阅读
# 如何实现Redis延迟队列 Java ## 概述 在本文中,我们将教你如何使用Redis实现延迟队列,通过Java代码实现延迟队列是一种常用的消息队列,可以在一定延迟时间后将消息发送给消费者。在这个过程中,我们会使用Redis的有序集合(sorted set)来实现延迟队列的功能。 ## 流程图 ```mermaid flowchart TD Start --> Set_Dela
原创 2024-05-04 04:56:36
104阅读
延迟队列,顾名思义它是一种带有延迟功能的消息队列。 那么,是在什么场景下我才需要这样的队列呢?一、背景先看看一下业务场景:1.会员过期前3天发送召回通知2.订单支付成功后,5分钟后检测下游环节是否都正常,比如用户购买会员后,各种会员状态是否都设置成功3.如何定期检查处于退款状态的订单是否已经退款成功?4.实现通知失败,1,3,5,7分钟重复通知,直到对方回复?通常解决以上问题,最简单直接的办法就是
转载 2024-07-31 16:23:31
71阅读
分布式锁目标:解决并发的问题 分布式锁本质上就是在 Redis 里面占一个“坑”,当别的进程也要来占时,发现坑位被占了,就只好放弃或者稍后再试。 使用 setnx(set if not exists) 指令,来实现占坑, del 指令释放坑位redis 分布式锁演进直接加锁,释放锁。(存在的问题:释放异常了,造成锁一直存在,导致死锁)加锁,锁过期时间,释放锁。(存在的问题:加锁和锁过期时间之间失败
1、延迟队列工厂 package cn.xs.qishi.micro.plan.common.queue; import cn.xs.ambi.bas.util.StringUtils; import cn.xs.ambi.mgt.redis.RedisManager; import lombok. ...
转载 2021-10-11 17:15:00
436阅读
2评论
# Redis延迟队列实现 ## 简介 延迟队列是一种常见的消息处理方式,它允许将消息延迟发送到指定的时间。Redis是一个流行的内存数据库,它提供了丰富的数据结构和功能,可以很方便地实现延迟队列。 本文将介绍如何使用Redis的有序集合(sorted set)和定时任务来实现一个简单的延迟队列。 ## 基本原理 Redis的有序集合(sorted set)是一种有序的字符串集合,每个元
原创 2023-08-15 13:44:22
147阅读
业务场景我们常会遇见这样的一些业务场景:在延迟的一段时间后执行某个任务:当用户报名了某项活动,在活动开始的前一天自动发送短信提醒用户。当用户下了订单,如果超过半小时还未支则将订单设置成取消状态,不再让用户进行支付。…方案设计1、最简单的做法是用定时任务扫描业务表,发现符合相关的条件,则执行相关的业务逻辑。但是这样做的缺点是: (1)、需要不断的去查询数据库,频繁的进行IO。比如:要将超过半小时还未
转载 2023-07-13 15:49:40
205阅读
业务背景在平时的业务中我们可能会碰到这样的需求,用户A将任务分配给用户B,如果30天后用户B还没有处理这个任务,那么系统自动将这个任务转发给用户C,或者将任务退回给任务A。这里我们就可以使用延迟队列,我们写好转发方法或者退回方法,用户A分配任务时将时间记录放入延迟队列。当30天后用户B没有处理,我们获取从延迟队列里面获取这个记录,能获取得到,就执行转发方法或退回方法。如果30天内用户B处理了任务,
什么是延迟队列所谓的延迟队列就是,生产者的消息推送到队列中,消费者不会马上消费,而是到了设置的指定的时间才消费。可以采用Redis的zset来实现。将消息序列化成一个字符串作为zset的value。这个消息的到期处理时间作为score,然后用一个线程去轮询zset到期的任务处理,建议使用多线程,为了保障任务消费的可用性。不过多线程就要考虑并发抢任务。废话不多说直接上代码。  代码逻辑将任务放到队列
原创 2021-04-12 14:06:09
1176阅读
Redis实现简单延队列, 利用zset有序的数据结构, score设置为延时的时间戳. 实现思路:1、使用命令 [zrangebyscore keyName socreMin socreMax] 会返回已score排序由小到大的一个list2、list非空则使用[zrem keyName value]  删除第一个元素, 删除成功即代表消费成功, 可以解决多线程并发消费的问题
转载 2023-05-25 17:24:55
536阅读
在后端服务中,经常有这样一种场景,写数据库操作在异步队列中执行,且这个异步队列是多进程运行的,这时如果对同一资源进行写库操作,很有可能产生数据被覆盖等问题,于是就需要业务层在更新数据库之前进行加锁,这样保证在更改同一资源时,没有其他更新操作干涉,保证数据一致性。但如果在更新前对数据库更新加锁,那此时又来了新的更新数据库的请求,但这个更新操作不能丢弃掉,需要延迟执行,那这就需要添加到延迟队列
转载 2024-06-17 05:18:29
130阅读
Sorted Set了。我们可以把任务的描述序列化成字符串,放在Sorted Set的value中,然后把任务的执行时间戳作为score,利用Sorted Set天然的排序特性,执行时刻越早的会排在越前面。这样一来,我们只要开一个或多个定时线程,每隔一段时间去查一下这个Sorted Set中score小于或等于当前时间戳的元素(这可以通过zrangebyscore命令实现),然后再执行元素对应的任
转载 2023-06-20 15:23:49
166阅读
前序提到redis,更多的可能想到用作缓存的用途,其实redis也可以实现一些简单的消息队列用途,我们可以使用 list 数据结构实现队列。 list的几个命令lpush (left push)由队列的左边存放进去 rpush (right push)由队列的右边存放进去 lpop  (left pop)由队列的左边取出来rpop (right pop)由队列的右边取出来以上的四个命令,
redis实现普通消息队列延迟消息队列1.redis实现普通消息队列1.1 实现原理1.2 pom.xml1.3 JedisUtils工具类1.4 消息类1.4 消息队列类1.5 消息入队测试1.5 消息出队测试2.redis实现延迟消息队列2.1 实现原理2.2 pom.xml2.2 JedisUtils工具类2.3 消息类2.4 延迟消息队列类2.5 消息入队测试2.6 消息出队测试 1.
转载 2023-09-23 09:09:24
126阅读
在后端服务中,经常有这样一种场景,写数据库操作在异步队列中执行,且这个异步队列是多进程运行的,这时如果对同一资源进行写库操作,很有可能产生数据被覆盖等问题,于是就需要业务层在更新数据库之前进行加锁,这样保证在更改同一资源时,没有其他更新操作干涉,保证数据一致性。但如果在更新前对数据库更新加锁,那此时又来了新的更新数据库的请求,但这个更新操作不能丢弃掉,需要延迟执行,那这就需要添加到延迟队列中,延迟
# Java使用redis延迟队列实现 ## 引言 随着互联网行业的不断发展,越来越多的系统需要处理高并发和实时性的任务。为了保证系统的稳定性和性能,我们常常需要使用消息队列来进行异步处理。而延迟队列是其中一种常见的消息队列实现方式,它可以在指定的延迟时间后才将消息投递给消费者。 本文将介绍如何使用JavaRedis实现一个简单的延迟队列,包括实现原理、代码示例和饼状图展示。 ## 延
原创 2024-01-03 11:50:08
56阅读
业务需求业务里面需要文章的定时发布功能,因此打算采用mq和redis实现一下定时发布的功能。mq之前用过了。基于一些私信交换机地信息过期策略实现。所以这次采用redis。并且打算将这个延迟任务的服务集成在一个微服务里面,提供对外的feign的远程调用接口,这样就可以一劳永逸一下。博客内容本次redis实现将分为多个文章来详细描述一下。并且介绍一些重要功能的实现思路和重要代码以及redis的一些特
转载 2024-07-01 19:58:43
56阅读
文章目录延时队列的应用一、实现延时队列效果的方法1、RabbitMQ1.1、TTL DLX实现延时队列1.1.1、TTL DLX介绍1.1.2、DLX延时队列实现 延时队列的应用延时队列在项目中的应用还是比较多的,尤其像电商类平台:订单成功后,在30分钟内没有支付,自动取消订单外卖平台发送订餐通知,下单成功后60s给用户推送短信。如果订单一直处于某一个未完结状态时,及时处理关单,并退还库存淘宝
  • 1
  • 2
  • 3
  • 4
  • 5