Redis除了做缓存,还能做什么分布式锁 : 可以基于 Redisson 来实现分布式锁。限流 :可以通过 Redis + Lua 脚本的方式来实现限流。消息队列Redis 自带的 list 数据结构可以作为一个简单的队列使用,Redis5.0 中增加的 Stream 类型的数据结构更加适合用来做消息队列。复杂业务场景 :通过 Redis 以及 Redis 扩展提供的数据结构,可以很方便地完成
延迟队列,顾名思义它是一种带有延迟功能的消息队列。 那么,是在什么场景下我才需要这样的队列呢?一、背景先看看一下业务场景:1.会员过期前3天发送召回通知2.订单支付成功后,5分钟后检测下游环节是否都正常,比如用户购买会员后,各种会员状态是否都设置成功3.如何定期检查处于退款状态的订单是否已经退款成功?4.实现通知失败,1,3,5,7分钟重复通知,直到对方回复?通常解决以上问题,最简单直接的办法就是
转载 2024-07-31 16:23:31
71阅读
Redis 队列与 StreamRedis5.0 最大的新特性就是多出了一个数据结构 Stream,它是一个新的强大的支持多播的可持久化的消息队列,作者声明 Redis Stream 地借鉴了 Kafka 的设计。 Redis Stream 的结构如上图所示,每一个Stream都有一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的 ID 和对应的内容。消息是持久化的,Redis 重启后
转载 2023-07-17 16:20:26
243阅读
1点赞
分布式锁目标:解决并发的问题 分布式锁本质上就是在 Redis 里面占一个“坑”,当别的进程也要来占时,发现坑位被占了,就只好放弃或者稍后再试。 使用 setnx(set if not exists) 指令,来实现占坑, del 指令释放坑位redis 分布式锁演进直接加锁,释放锁。(存在的问题:释放异常了,造成锁一直存在,导致死锁)加锁,锁过期时间,释放锁。(存在的问题:加锁和锁过期时间之间失败
业务背景在平时的业务中我们可能会碰到这样的需求,用户A将任务分配给用户B,如果30天后用户B还没有处理这个任务,那么系统自动将这个任务转发给用户C,或者将任务退回给任务A。这里我们就可以使用延迟队列,我们写好转发方法或者退回方法,用户A分配任务时将时间记录放入延迟队列。当30天后用户B没有处理,我们获取从延迟队列里面获取这个记录,能获取得到,就执行转发方法或退回方法。如果30天内用户B处理了任务,
业务场景我们常会遇见这样的一些业务场景:在延迟的一段时间后执行某个任务:当用户报名了某项活动,在活动开始的前一天自动发送短信提醒用户。当用户下了订单,如果超过半小时还未支则将订单设置成取消状态,不再让用户进行支付。…方案设计1、最简单的做法是用定时任务扫描业务表,发现符合相关的条件,则执行相关的业务逻辑。但是这样做的缺点是: (1)、需要不断的去查询数据库,频繁的进行IO。比如:要将超过半小时还未
转载 2023-07-13 15:49:40
205阅读
什么是延迟队列所谓的延迟队列就是,生产者的消息推送到队列中,消费者不会马上消费,而是到了设置的指定的时间才消费。可以采用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阅读
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阅读
在后端服务中,经常有这样一种场景,写数据库操作在异步队列中执行,且这个异步队列是多进程运行的,这时如果对同一资源进行写库操作,很有可能产生数据被覆盖等问题,于是就需要业务层在更新数据库之前进行加锁,这样保证在更改同一资源时,没有其他更新操作干涉,保证数据一致性。但如果在更新前对数据库更新加锁,那此时又来了新的更新数据库的请求,但这个更新操作不能丢弃掉,需要延迟执行,那这就需要添加到延迟队列中,延迟
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阅读
前序提到redis,更多的可能想到用作缓存的用途,其实redis也可以实现一些简单的消息队列用途,我们可以使用 list 数据结构实现队列。 list的几个命令lpush (left push)由队列的左边存放进去 rpush (right push)由队列的右边存放进去 lpop  (left pop)由队列的左边取出来rpop (right pop)由队列的右边取出来以上的四个命令,
文章目录延时队列的应用一、实现延时队列效果的方法1、RabbitMQ1.1、TTL DLX实现延时队列1.1.1、TTL DLX介绍1.1.2、DLX延时队列实现 延时队列的应用延时队列在项目中的应用还是比较多的,尤其像电商类平台:订单成功后,在30分钟内没有支付,自动取消订单外卖平台发送订餐通知,下单成功后60s给用户推送短信。如果订单一直处于某一个未完结状态时,及时处理关单,并退还库存淘宝
下载好向圈APP可以快速联系圈友您需要 登录 才可以下载或查看,没有帐号?立即注册 x作者:爱的奇迹,前百度高级工程师,现供职于微博,一直做 PHP 相关的开发工作。链接:https://github.com/chenlinzhong/php-delayqueue延迟队列,顾名思义它是一种带有延迟功能的消息队列。 那么,是在什么场景下我才需要这样的队列呢?一、背景先看看一下业务场景:1.会员过期前
延迟队列是指把当前要做的事情,往后推迟一段时间再做。延迟队列在实际工作中和面试中都比较常见,它的实现方式有很多种,然而每种实现方式也都有它的优缺点,接下来我们来看。延迟队列的使用场景延迟队列的常见使用场景有以下几种:超过 30 分钟未支付的订单,将会被取消外卖商家超过 5 分钟未接单的订单,将会被取消在平台注册但 30 天内未登录的用户,发短信提醒等类似的应用场景,都可以使用延迟队列实现。常见实
转载 2023-07-07 16:37:52
47阅读
使用 sortedset,使用时间戳做 score, 消息内容作为 key,调用 zadd 来生产消息,消费者使用 zrangbyscore 获取 n 秒之前的数据做轮询处理。redis取得当前时间戳127.0.0.1:6379> time1) "1578537098"2) "732425"127.0.0.1:6379> eval "local a=redis...
原创 2021-08-13 09:53:58
472阅读
# 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阅读
前言工作中常常会遇到这样的场景,如订单到期未支付取消,到期自动续费等,我们发现延迟队列非常适合在这样的场景中使用。常见的延迟队列的优秀实现有rabbitMQ的死信队列,RocketMQ的延迟队列等,但是了有时候项目没有特别的大,没有引入类似的消息中间件,但是了又遇到了特别适合使用延迟队列的场景,我们一般会利用已有的redis实现一个简陋的延迟队列。常见的实现方式有监听过期key,使用
  • 1
  • 2
  • 3
  • 4
  • 5