数据库任务定时同步到redis
把数据库任务定时存储到redis:当前时间 < 执行时间 <= 预设时间(当前时间+5分钟)
预加载:如果任务量特别大,一次将数据库所有future任务全都加载到redis内存,可能会导致阻塞。
1.清理缓存中的数据
2.查询小于未来5分钟的所有任务
3.新增任务到redis
/** * 数据库任务定时同步到redis中,每5分钟执行一次 */ @PostConstruct //开机同步。依赖注入完成后,初始化之前被调用,用于执行一些必要的初始化操作 @Scheduled(cron = "0 */5 * * * ?") public void reloadData(){ //1、清理缓存中的数据 clearCache(); //2、查询符合条件的任务小于未来五分钟的数据 Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MINUTE, 5); List<Taskinfo> taskinfoList = taskinfoMapper.selectList(Wrappers.<Taskinfo>lambdaQuery().lt(Taskinfo::getExecuteTime, calendar.getTime())); //3、把任务添加到redis中,拉取任务会将任务从数据库中删除并修改任务日志状态 if(taskinfoList != null && taskinfoList.size() > 0){ for (Taskinfo taskinfo : taskinfoList) { Task task = new Task(); BeanUtils.copyProperties(taskinfo, task); task.setExecuteTime(taskinfo.getExecuteTime().getTime()); addTaskToCache(task); } } log.info("数据库的任务同步到了redis"); } /** * 清理缓存中的数据 */ public void clearCache(){ Set<String> topicKeys = cacheService.scan(ScheduleConstants.TOPIC + "*"); Set<String> futureKeys = cacheService.scan(ScheduleConstants.FUTURE + "*"); cacheService.delete(topicKeys); cacheService.delete(futureKeys); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构