有什么方式实现实时任务?

1、Java中的几种实现方式

1.1、Timer类

public class TestTimer {static int i = 0;public static void main(String[] args) {TimerTask timerTask = new TimerTask() {@Overridepublic void run() {System.out.println("执行任务:" + i++);}};Timer timer = new Timer();timer.schedule(timerTask, 10, 3000);}
}

1.2、ScheduledExecutorService

    public void schedule() {ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();service.scheduleAtFixedRate(() -> System.out.println("定时执行"), 0, 3, TimeUnit.SECONDS);}

1.3、利用spring的@Schedule( cron = “0 0/10 * * * ?” )

(在使用zset中代码示例)

1.4、DequeQueue

实现Deque接口。使用DequeQueue延时队列

2、redis使用zset

在Redis中,zet作为有序集合,可以利用其有序的特性,将任务添加到zset中,将任务的到期时间作为score,利用zset的默认有序特性,zrangewithscores可以获取score值最小的元素(也就是最近到期的任务),判断系统时间与该任务的到期时间大小,如果达到到期时间,就执行业务,并删除该到期任务,继续判断下一个元素,如果没有到期,就sleep一段时间(比如1秒),如果集合为空,也sleep一段时间。

附: 简单的延时队列的需求:如何实现对下单超过15分钟没有支付的订单进行取消操作

1、使用zset数据结构存储,订单号为key,时间为score。
2、新增订单的时候,将订单号插入zset。
3、设定轮询,每分钟轮询一次zset,找出score小于当前秒数的数据,进行处理,然后将key在zset内删除。

创建定时任务:

@Component
@EnableScheduling
public class ScheduleTask {@Autowiredprivate RedisTemplate redisTemplate;@Scheduled(cron = "* * * * * *")public void schedule() {ZSetOperations zSetOperations = redisTemplate.opsForZSet();Set<String> task = zSetOperations.rangeByScore("task", 0, System.currentTimeMillis());Iterator<String> iterator = task.iterator();while (iterator.hasNext()) {String curTask = iterator.next();System.out.println(curTask);zSetOperations.remove("task", curTask);}}}

增加延时任务:

    @ResponseBody@GetMapping("/addTask")public String redisAddTask(Long time, String taskName) {ZSetOperations zSetOperations = redisTemplate.opsForZSet();zSetOperations.add("task", taskName, System.currentTimeMillis() + time);return taskName;}

有什么方式实现实时任务?相关推荐

  1. 114.Spark大型电商项目-广告点击流量实时统计-使用高性能方式将实时计算结果写入MySQL中

    目录 误区 Spark Streaming foreachRDD的正确使用方式 对于这种实时计算程序的mysql插入,有两种pattern(模式) 代码 AdUserClickCount.java I ...

  2. 【v3.6.2】iNeuOS工业互联网操作系统,发布实时存储方式:实时存储、变化存储、定时存储,设备振动状态和电能状态监测驱动...

    目       录 1.      概述... 1 2.      平台演示... 2 3.      存储方式... 2 4.      设备状态和用电状态监控驱动... 3 1.   概述 本次升 ...

  3. 室内靶场的自动报靶设备通过什么方式进行实时数据传输

    在室内靶场建设中,除了靶机设备外还存在一套整合的智能系统,今天我们主要要了解的是关于射击成绩实时播报显示的智能靶位显示系统和智能观摩区成绩同步显示系统. 靶场总控系统中包括靶位成绩显示系统和观摩区成绩 ...

  4. 一文讲透推荐系统提供web服务的2种方式

    作者丨gongyouliu 编辑丨zandy 来源 | 大数据与人工智能(ID: ai-big-data) 推荐系统是一种信息过滤技术,通过从用户行为中挖掘用户兴趣偏好,为用户提供个性化的信息,减少用 ...

  5. 远哥谈 使用WebSocket开发在线实时看远程服务器log日志的工具

    我们开发软件的,通常会有一个测试环境/开发环境,但是系统开发完成后,还会有一个生产环境,也叫正式环境.正式环境我们一般是不能让开发人员去远程登录和维护的,一般正规的生产环境是专门的负责人员去负责更新, ...

  6. sersync + rsync 实现文件的实时同步

    这里有一点要特别注意了,就是在你完成备份之后,先不要把本地的文件都给删除了,先把服务停了之后再删除文件, 因为你已删除,检查到两边不一致,他又会把备份端给删除了.所以特别得注意了.这里吃过一次亏. 还 ...

  7. rsync+inotify实现服务器之间文件实时同步--转

    之前做了"ssh信任与scp自动传输脚本"的技术文档,此方案是作为公司里备份的方法,但在实际的运行中,由于主服务器在给备份服务器传输的时候,我们的主服务器需要备份的文件是实时.不停 ...

  8. java文字转语音支持ubuntu系统_9个(实时)语音转文字APP分享(推荐收藏)

    " 做会议记录.看无字幕网课再也不用担心,解放双手,提高效率." 随着语音转文字技术的发展,我们记录会议.上课内容等有了更好的方式. 实时语音转文字实现边听边看,并且还可回看转译记 ...

  9. 开发效率提升15倍!批流融合实时平台在好未来的应用实践

    简介:本文由好未来资深数据平台工程师毛祥溢分享,主要介绍批流融合在教育行业的实践.内容包括两部分,第一部分是好未来在做实时平台中的几点思考,第二部分主要分享教育行业中特有数据分析场景. 摘要:本文由好 ...

最新文章

  1. python 保存内容到记事本里面
  2. 1874: 生活大爆炸版石头剪刀布
  3. java 自定义注解 生成json_SpringBoot:自定义注解实现后台接收Json参数
  4. js笔记(二)数组、对象、this
  5. Java集合Set、Map、HashSet、HashMap、TreeSet、TreeMap等
  6. mycat核心配置详解(schema.xml配置)
  7. SpringBoot+Vue.js实现大文件分片上传、断点续传与极速秒传
  8. Caffe学习:使用pycaffe绘制loss、accuracy曲线
  9. 编程基础(三)——体系结构之三
  10. SSO 自动登录 跨站点 解决方案。
  11. 英睿达固态硬盘测试软件,高速读写,电竞必备 英睿达P5固态硬盘评测
  12. 今天谁在开网店?兼职卖家占整体网店近70%
  13. 国产CPU性能大盘点 单核性能谁最强
  14. 程序员常用资源工具集合(建议收藏)
  15. ajax 网页加速,20 种提升网页速度的技巧
  16. 谷歌搜索留痕组合工具,批量生成
  17. 【性能测试】Jmeter性能测试实战
  18. 荣耀畅玩8C生猛来袭夺C位,红米Note5看了只能默默躲角落
  19. 企业网站制作网站安全评估技术与漏洞挖掘技术
  20. Mac和Windows共享文件,不借助任何软件

热门文章

  1. 全球及中国工程起重机行业格局与十四五运营趋势研究报告2022版
  2. 编写第一个flutter的安卓app
  3. 江西准金:茶颜悦色遭遇清冷客流骤降 今年已三次集中临时闭店
  4. htonl/htons以及ntohl/ntohs等函数使用说明
  5. Unity XR Interact Tookit使用
  6. 【python】滑动窗口算法
  7. 设计模式-外观模式(门面模式)
  8. Win7设置允许程序通过防火墙的方法【系统天地】
  9. 推荐系统[八]算法实践总结V4:混排算法在淘宝信息流第四代混排调控框架实战,提升推荐实时性捕捉实时兴趣。
  10. 账号管理 php,管理员admin账号管理工具