redis实现延迟任务(四)

定时任务和延迟任务,Java中实现延迟任务 定时任务指的是在预定的时间或间隔内执行特定任务或代码的过程。它是一种常见的编程需求,用于执行周期性的操作、定时触发事件以及处理需要延迟执行的任务。在软件开发中,定时任务通常用于处理后台数据处理、系统维护、报表生成、数据备份等任务。 阅读详情

任务消费

四主要是接着三来接着说,文章三之前已经完成了对于任务服务的编写,其中开发了任务的创建和和删除,任务的同步等等。那么该篇文章主要举例讲解任务的消费。

代码实现

添加任务:

   @Override
    @Async
    public void addNewsToTask(Integer id, Date publishTime) {

        log.info("添加任务到延迟服务中----begin");

        Task task = new Task();
        task.setExecuteTime(publishTime.getTime());
        task.setTaskType(TaskTypeEnum.NEWS_SCAN_TIME.getTaskType());
        task.setPriority(TaskTypeEnum.NEWS_SCAN_TIME.getPriority());
        WmNews wmNews = new WmNews();
        wmNews.setId(id);
        task.setParameters(ProtostuffUtil.serialize(wmNews));
        scheduleClient.addTask(task);
        log.info("添加任务到延迟服务中----end");

    }

这是一个添加任务,在发布文章的方法里,调用添加任务这个方法,传入对象”文章“也就是news,然后到发布时间了就会进行任务的拉取消费审核然后发布,在最后一步骤可以调用该方法,将news传入task里。

任务消费:

  /**
     * 消费延迟队列数据
     */
    @Scheduled(fixedRate = 1000)//固定频率,1s拉取一次
    @Override
//    @SneakyThrows
    public void scanNewsByTask() {

        log.info("文章审核---消费任务执行---begin---");
        RestResponse result = scheduleClient.poll(TaskTypeEnum.NEWS_SCAN_TIME.getTaskType(), TaskTypeEnum.NEWS_SCAN_TIME.getPriority());
//        log.info(result.getCode()+result.getResult().toString());
        if(result.getCode()==0 && result.getResult() != null){
            String json_str = JSON.toJSONString(result.getResult());
            Task task = JSON.parseObject(json_str, Task.class);
            byte[] parameters = task.getParameters();
            //反序列化,parameters里装着任务对象
            WmNews wmNews = ProtostuffUtil.deserialize(parameters, WmNews.class);
            System.out.println(wmNews.getId()+"-----------");
            wmNewsAutoScanService.autoScanWmNews(wmNews.getId());
        }
        log.info("文章审核---消费任务执行---end---");
    }

ProtostuffUtil:

这个是一个序列化和反序列化的工具,效率要比jdk高,jdk的序列化个人感觉太慢了,而序列化个人觉得就是将其转换成符合一种双方都能接收的协议,例如http协议规定的数据格式,利用json序列化也可以。

依赖:

<!--protostuff-->
        <dependency>
            <groupId>io.protostuff</groupId>
            <artifactId>protostuff-core</artifactId>
            <version>1.6.0</version>
        </dependency>

        <dependency>
            <groupId>io.protostuff</groupId>
            <artifactId>protostuff-runtime</artifactId>
            <version>1.6.0</version>
        </dependency>

如何用Redis实现延迟队列 虽然基于MQ这个方式走不通了,但是这个项目中使用到Redis,所以我就想是否能够使用Redis来代替MQ实现延迟队列的功能,于是我就查了一下有没有现成可用的方案,别说,还真给我查到了两种方案,并且我还仔细研究对比了这两个方案,发现要想很好的实现延迟队列,并不简单。到这我终于明白了,上面的例子中即使我设置了5s的过期时间,但是当5s过去之后,只要两种清除策略都不满足,没人访问sanyou这个key,后台的定时清理的任务也没扫描到sanyou这个key,那么就不会发布key过期的事件,自然而然也就监听不到了。 阅读详情

相关推荐

使用Redis如何实现延迟任务?

延迟任务(Delayed Task)是指在未来的某个时间点,执行相应的任务。也就是说,延迟任务是一种计划任务,它被安排在特定的时间后执行,而不是立即执行。延迟任务的常见使用场景有以下几个:1、定时发送通知或消息:发送定时短信、邮件或应用内消息,如注册确认、订单状态更新、促销活动通知等。定时推送新闻、天气预报、股票价格等实时信息。2、异步处理和后台任务:将耗时的操作安排为延迟任务,避免阻塞主线程或用户界面,提高系统的响应性能。执行批量数据处理,如日志分析、数据报表生成等。

胸纳甲兵,烽烟起可靖疆晏海。 1335

如何用Go语言构建高效延时任务系统:从原理到实践的完整指南

在现代应用开发中,延时任务系统是处理异步业务逻辑的核心组件,广泛应用于订单超时取消、定时通知、数据备份等场景。《Go语言高级编程》开源图书([ch6-cloud/ch6-03-delay-job.md](https://link.gitcode.com/i/c4279faabce68606b44111bf1e12b9e5))深入剖析了这一技术,本文将带你快速掌握Go语言实现延时任务系统的关键技术与

gitblog_00725的博客 514

【微服务】SpringBoot 整合Redis实现延时任务处理使用详解

SpringBoot 整合Redis实现延时任务处理使用详解

congge 1万+

Java教程!java爬虫框架存redis

一面(技术面:算法+Redis+MySQL+网络) 给定m个不重复的字符 [a, b, c, d],以及一个长度为n的字符串tbcacbdata,问能否在这个字符串中找到一个长度为m的连续子串,使得这个子串刚好由上面m个字符组成,顺序无所谓,返回任意满足条件的一个子串的起始位置,未找到返回-1。比如上面这个例子,acbd,3。给定m个可能重复的字符[a, b, d, d]呢? 提供一个整型数组以及一个整数s,如果该数组中存在n个连续元素,且元素相加之和大于等于s,则返回满足该条件的连续元素的最小长度;否则

m0_56146626的博客 125

【AI开源】Understand-Anything 完整使用教程(2026最新版)

Understand-Anything是一款基于交互式知识图谱的AI学习与开发平台,能够将代码库转化为可视化知识结构,支持语义搜索、上下文问答和全流程开发。核心功能包括代码知识图谱化、AI辅助学习和多编码代理集成。支持TypeScript/JavaScript、Python等多种语言,要求Node.js 20+和16GB以上内存。提供NPM、Docker和源码三种安装方式,支持增量更新和团队知识共享。与同类产品相比,在交互式图谱、语义搜索和AI集成方面更具优势。适用于代码学习、大型项目维护和团队协作等场景。

与时俱进,开放共享 7199

【论文+CAD图纸】光储充一体化微电网设计

近些年来,我国的经济发展迅速,对能源的需求不断增长,也加重了对环境的破坏,违背了我国的可持续发展战略。所以迫切需要寻找新型能源。由于太阳能在使用时不会产生污染,所以太阳能逐渐受到人们的重视。我国的太阳能资源丰富,具有的开发利用潜力。特别是近些年“光储充”一体化充电站为高科技绿色充电模式,“以光养桩”使光伏、储能、智能充电协同,智能微电网与公共电网互动,本设计对探索清洁可再生能源在民用场合的应用,有着重大的理论和工程价值。本文综述国内外相关光伏发电的成果和发展现状;

weixin_761237174的博客 924

Redis实现延迟任务的几种方案

延迟任务(Delayed Task)是指在未来的某个时间点,执行相应的任务。也就是说,延迟任务是一种计划任务,它被安排在特定的时间后执行,而不是立即执行。Redis 本身并没有直接提供延迟任务的功能,但可以通过一些策略和手段,在 Redis 中手动实现延迟任务。

qq_35716689的博客 2万+

海思MPP平台千兆以太网驱动集成与测试指南

千兆以太网(GE)是嵌入式视觉系统中音视频流传输与边缘控制的核心物理接口,其底层驱动需兼顾DMA高效调度、中断实时响应与PHY链路稳定性。在Linux嵌入式环境中,GE驱动通常基于net_device框架实现,并深度耦合于SoC专用媒体处理平台(如海思MPP),通过硬件抽象层(HAL)屏蔽寄存器操作,提供零拷贝、RGMII时序适配、描述符环管理等关键能力。技术价值体现在降低CPU负载、保障1080p@30fps实时推流、支持ONVIF/RTSP协议交互及固件远程升级。典型应用场景包括网络摄像机(IPC)、A

weixin_42599908的博客 89

redis实现延迟任务

定时任务:有固定周期,有明确的触发时间延迟任务:没有固定的开始时间,由一个事件触发,在这个事件触发之后的一段时间内触发另一个事件,任务可以立即执行,也可以延迟执行。场景1:订单下单30分钟后,如果用户没有付钱,则系统自动取消订单;如果期间下单成功,任务取消。场景2:接口对接接口出现网络问题,1分钟后重试,如果失败,2分钟后重试,直到出现阈值终止。实现方式。

qq_57882997的博客 1366

K210学习笔记(八)——人脸检测和人脸识别

前言 人脸检测是人脸识别算法的第一步,人脸识别过程主要分为人脸图像获取、人脸检测、人脸配准、人脸表征以及人脸图像匹配与识别。人脸检测的目标是找出图像中所有的人脸对应的位置,算法的输出是人脸外接矩形(椭圆)在图像中的坐标,可能还包括姿态如倾斜角度等信息。人脸检测在安防监控,人证比对,人机交互,社交和娱乐等方面有很强的应用价值。 人脸识别是在人脸检测的基础上除了检测到人脸的位置以外, 还可以识别到这个人是谁,利用分析比较是基于人的脸视觉部特征信息进行身份鉴识别的计算机一种生物识别技术。 一、KPU模块方法 1、

Thousand_drive的博客 1万+

QGIS|如何将WGS84转换为CGCS 2000坐标系?

QGIS 3中如何将WGS84转换为国家2000大地坐标系? 今天来回答一位朋友在后台留言提出的问题:怎么将WGS84坐标转换为国家2000大地坐标系。 01工程坐标系 从地图窗口右下角的状态栏可以看到当前地图窗口的坐标系,即工程坐标系(Project CRS)。当前地图可以由多个图层组成,各种来源数据的坐标参照系(Layer CRS)并不一定相同,QGIS在绘制图层之前将根据工程坐标系进行动态坐标转换,然后显示在地图画布中。 因此,在处理空间数据的过程中,一定要特别注意...

QGISClass的博客 1万+

Spring Boot整合Redis通过Zset数据类型+定时任务实现延迟队列

在我们项目开发中,我们经常需要在特定时间后执行某些任务,例如订单超时未支付自动取消、资金余额低于限额提醒、延时消息发送等。延迟队列是一种非常实用的解决方案,而Redis也具备延迟队列的功能,这里博主将和大家分享基于Redis的Zset数据类型定时任务实现延迟队列到这里相信小伙伴们已经了解了如何使用和Redis实现一个简单的延迟队列,并使用线程池来执行定时任务以提高效率。延迟队列能够有效地处理需要在特定时间点或延迟一段时间后执行的任务。

Micro麦可乐的博客 1万+

LiveKit 本地部署实战:从零搭建安全实时通信环境(Caddy+HTTPS)

本文详细介绍了如何从零开始搭建LiveKit本地部署环境,结合Caddy服务器实现HTTPS安全通信。通过环境准备、证书生成、服务配置到前端客户端集成的完整流程,帮助开发者快速构建实时音视频应用,特别适合需要安全实时通信的场景。

weixin_29227585的博客 674

Redis实现延迟队列

延迟队列,顾名思义它是一种带有延迟功能的消息队列。那么,是在什么场景下我才需要这样的队列呢? 1. 背景 我们先看看以下业务场景: 当订单一直处于未支付状态时,如何及时的关闭订单 如何定期检查处于退款状态的订单是否已经退款成功 在订单长时间没有收到下游系统的状态通知的时候,如何实现阶梯式的同步订单状态的策略 在系统通知上游系统支付成功终态时,上游系统返回通知失败,如何进行异步通知实行分频率发送:...

睁眼看世界 2万+

生成模型实战 | StyleGAN详解与实现

StyleGAN 能够生成非常高分辨率人脸图像的关键在于,在增加分辨率的步骤中逐步增加生成网络和判别网络的复杂性,以便在每一步中,两个模型都可以很好地完成任务。我们学习了如何通过确保每个分辨率的特征由一个独立的输入(称为风格向量)来控制,从而操纵生成图像的风格,以及如何通过将图像之间的风格进行交换来操作不同图像的风格。

盼小辉丶的博客 7563

《大数据之路:阿里巴巴大数据实践》-第1篇 数据技术篇 -第3章数据同步

我们将数据釆集分为日志采集和数据库数据同步两 部分。数据同步技术更通用的含义是不同系统间的数据流转,有多种不 同的应用场景。主数据库与备份数据库之间的数据备份,以及主系统与 子系统之间的数据更新,属于同类型不同集群数据库之间的数据同步。 另外,还有不同地域、不同数据库类型之间的数据传输交换,比如分布 式业务系统与数据仓库系统之间的数据同步。对于大数据系统来说,包 含数据从业务系统同步进入数据仓库和数据从数据仓库同步进入数据 服务或数据应用两个方面。本章侧重讲解数据从业务系统同步进入数据 仓库这个环节,但其适

m0_54252387的博客 960

3招搞定!Redis如何高效实现延迟任务?

延迟任务(Delayed Task)是指在未来的某个时间点执行的任务。换句话说,延迟任务是一种计划任务,它被安排在特定的时间后执行,而不是立即执行。通过本文的详细介绍,我们学会了如何使用 Redis 实现延迟任务,包括使用过期键的事件通知、使用 ZSet 和使用 Redisson 内置的延时队列。希望这篇文章能帮助你在面试中轻松应对这类问题,让你的数据管理更加得心应手!😄如果你有任何问题或建议,欢迎在评论区留言交流!😊。

java专栏 1876

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【Java】基于Redis的Java延迟任务实现

首先将任务数据添加到数据库里,再由数据库导入到Redis,导入之前会先进行判断任务执行时间是否小于等于当前时间,如果是,则代表当前任务立即执行,将其放入到Redis的消费队列中消费任务。如果否则判断执行时间是否小于等于预设时间,如果是,则将其放入Redis的zset有序集合中等待执行,在Redis中每分钟定时刷新,如果延迟任务需要执行的话,就会从zset进入到list里执行,Redis中只有list才能消费任务。,内存数据库的存储是有限的,需要考虑数据持久化的问题,存储数据。消费者代码(执行延迟任务)

qq_45775791的博客 1496

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

10种延迟任务实现方式

好了,话不多说,直接进入今天的主题,本文的主要内容如下图所示: 什么是延迟任务? 顾明思议,我们把需要延迟执行的任务叫做延迟任务。 延迟任务的使用场景有以下这些: 红包 24小时未被查收,需要延迟执退还业务; 每个月账单日,需要给用户发送当月的对账单; 订单下单之后 30 分钟后,用户如果没有付钱,系统需要自动取消订单。 等事件都需要使用延迟任务。 延迟任务实现思路分析 延迟任...

MrLee的博客 7102

重学SpringBoot3-集成Redis(八)之限时任务(延迟队列)

Redis 的高性能和有序集合特性为我们提供了实现延迟队列的基础,而 Spring Boot 的定时任务调度则帮助我们定期处理这些任务。在实际场景中,限时任务的应用非常广泛,比如订单超时处理、消息重发等场景,借助 Redis 我们可以有效管理这些延迟任务并确保系统的高效运行。希望这篇文章能够帮助你更好地理解如何使用 Spring Boot 3 与 Redis 实现延迟队列。如果你在项目中遇到了相关问题,欢迎在评论区分享你的问题与经验。

CoderJia的学习之路 3604

面试官:Redis如何实现延迟任务?

本文内容已收录至我的面试网站:www.javacn.site延迟任务(Delayed Task)是指在未来的某个时间点,执行相应的任务。也就是说,延迟任务是一种计划任务,它被安排在特定的时间后执行,而不是立即执行。延迟任务的常见使用场景有以下几个:定时发送通知或消息:发送定时短信、邮件或应用内消息,如注册确认、订单状态更新、促销活动通知等。定时推送新闻、天气预报、股票价格等实时信息。异步处理和后台...

磊哥聊Java 1041

【黑马头条之redis实现延迟任务】

1.为什么任务需要存储在数据库中?延迟任务是一个通用的服务,任何需要延迟得任务都可以调用该服务,需要考虑数据持久化的问题,存储数据库中是一种数据安全的考虑。2.为什么redis中使用两种数据类型,list和zset?效率问题,算法的时间复杂度3.在添加zset数据的时候,为什么不需要预加载?任务模块是一个通用的模块,项目中任何需要延迟队列的地方,都可以调用这个接口,要考虑到数据量的问题,如果数据量特别大,为了防止阻塞,只需要把未来几分钟要执行的数据存入缓存即可。

蛋饼吧的博客 1843
上一篇: redis实现任务队列(三)
下一篇: reids优化系列(五)
happystudy_neu
博客等级 码龄4年 1140粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值