当前位置: 首页 > news >正文

【定时任务处理中的分页问题】

最近要做一个定时任务处理的需求,在分页处理上。发现了大家容易遇到的一些"坑",特此分析记录一下。

场景

现在想象一下这个场景,你有一个定时处理任务,需要查询数据库任务表中的所有待处理任务,然后进行处理。

举个例子:生成用户的月度账单,并且要尽可能确保每个用户都能生成自己的账单,推送到用户的邮箱中。

分析

拿到这样一个任务之后,我们很自然的就想到了加一个定时任务,每隔一段时候处理这些任务。

任务肯定是先查询,再处理。处理完成之后,再更新任务状态。

关于查询

一般开始一个任务时,都是要有一个范围的,比如特定时间或特定用户。如果不界定范围,由于产线上的数据不断更新,我们的程序就会变得不可控!因此我们先要界定一个范围,然后再进行处理。

由于任务基数可能比较大,所以查询任务的时候,不能一次性全部读取到内存中,因此需要进行分页处理。

关于更新

任务更新的时候,考虑到并发,我们一般都要进行待状态更新,这样才能确定更新结果符合预期。如果更新结果不符合预期,还可以适当告警。

分页1.0

根据上面的需求,我们很容易就写出了如下v1.0代码(使用了PageHelper进行分页)。

http://www.lryc.cn/news/127575.html

相关文章:

  • Vue3 Vuex状态管理多组件传递数据简单应用
  • Beats:安装及配置 Metricbeat (一)- 8.x
  • openCV使用c#操作摄像头
  • Centos 防火墙命令
  • 【第二讲---初识SLAM】
  • C++ 面向对象三大特性——继承
  • LC-相同的树
  • RocketMQ部署 Linux方式和Docker方式
  • css内容达到最底部但滚动条没有滚动到底部
  • 机器学习深度学习——transformer(机器翻译的再实现)
  • 神经网络基础-神经网络补充概念-30-搭建神经网络块
  • 在线吉他调音
  • Windows11 Docker Desktop 启动 -wsl kernel version too low
  • Golang 中的 unsafe 包详解
  • linux 的swap、swappiness及kswapd原理【转+自己理解】
  • 什么是Java中的适配器模式?
  • MYSQL线上无锁添加索引
  • 如何实现客户自助服务?打造产品知识库
  • LeetCode环形子数组的最大和(编号918)
  • PhpOffice/PhpSpreadsheet读取和写入Excel
  • jenkins自动化部署Jenkinsfile文件配置
  • 【socket编程简述】TCP UDP 通信总结、TCP连接的三次握手、TCP断开的四次挥手
  • 多线程-死锁
  • P1006 [NOIP2008 提高组] 传纸条
  • 杭电比赛总结
  • dom靶场
  • go struct 的常见问题
  • Linux系统下的性能分析命令
  • 第十三课:QtCmd 命令行终端应用程序开发
  • Jmeter进阶使用:BeanShell实现接口前置和后置操作