使用XXL-JOB任务定时更新缓存

一、XXL-JOB介绍

分布式调度平台XXL-JOB介绍

在分布式环境下进行任务调度需要使用分布式任务调度平台,XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。目前已有多家公司接入xxl-job,包括比较知名的大众点评,京东,优信二手车,北京尚德,360金融 (360),联想集团 (联想),易信 (网易)等等...

官网地址:https://github.com/xuxueli/xxl-job

XXL-JOB主要有调度中心、执行器、任务:

调度中心:

负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码;

主要职责为执行器管理、任务管理、监控运维、日志管理等。

任务执行器:

负责接收调度请求并执行任务逻辑;

主要职责是执行任务、执行结果上报、日志服务等。

使用XXL-JOB就可以解决使用多个jvm进程重复执行任务的问题,如下图:

XXL-JOB调度中心可以配置路由策略,比如:第一个、轮询策略、分片等,它们分别表示的意义如下:

第一个:即每次执行任务都由第一个执行器去执行。

轮询:即执行器轮番执行。

分片:每次执行任务广播给每个执行器让他们同时执行任务。

如果根据需求每次执行任务仅由一个执行器去执行任务可以设置路由策略:第一个、轮询。如果根据需求每次执行任务由多个执行器同时执行可以设置路由策略为:分片。

二、使用xxljob定时更新缓存

2.1 XXL-JOB搭建配置

  • 1)配置xxl-job,进入nacos,配置shared-xxl-job.yaml:

address:调度中心的地址

appName:执行器名称,为spring.application.name表示微服务的名称(在bootstrap.yml中配置)

port:执行器端口号,通过xxl-job.port配置

  • 2)在foundations.yaml中配置执行器的端口:

  • 3)在foundations中加载shared-xxl-job.yaml:

  • 4)进入调度中心,进入执行器管理界面:

AppName:执行名称,在shared-xxl-job.yaml中指定执行器名称就是微服务的应用名。

名称:取一个中文名称。

注册方式:自动注册,只要执行器和调度中心连通执行器会自动注册到调度中心

机器地址:自动注册时不用填写。

2.2 定义缓存更新任务

定义缓存更新任务

1)编写任务方法

定时执行任务就需要编写任务方法,此任务方法由执行器去调用。

下边代码中demoJobHandler()就是一个任务方法,需要使用@XxlJob注解标识,所在类需要由spring去管理,所以加了@Component注解。

java 复制代码
@Component
public class SampleXxlJob {
    private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);

	/**
	 * 1、简单任务示例(Bean模式)
	 */
	@XxlJob("demoJobHandler")
	public void demoJobHandler() throws Exception {
	    XxlJobHelper.log("XXL-JOB, Hello World.");
	
	    for (int i = 0; i < 5; i++) {
	        XxlJobHelper.log("beat at:" + i);
	        TimeUnit.SECONDS.sleep(2);
	    }
	    // default success
	}

根据目标,使用xxl-job定时更新开通区域列表的缓存。

java 复制代码
@Slf4j
@Component
public class SpringCacheSyncHandler {

    @Resource
    private IRegionService regionService;
    @Resource
    private RedisTemplate redisTemplate;


    @XxlJob(value = "activeRegionCacheSync")
    public void activeRegionCacheSync() {
        log.info(">>>>>>>>开始进行缓存同步");
        //1.清理缓存
        String key = RedisConstants.CacheName.JZ_CACHE + "::ACTIVE_REGIONS";
        redisTemplate.delete(key);

        //2.刷新缓存
        regionService.queryActiveRegionListCache();
        log.info(">>>>>>>>更新缓存完成");
    }

}

2)配置任务

在调度中心配置任务。进入任务管理,新增任务:

3)启动任务并测试

相关推荐
虹科网络安全2 小时前
艾体宝新闻|Redis 月度更新速览:2026 年 3 月
数据库·redis·缓存
189228048612 小时前
EMMC32G-TA28闪存EMMCH26M78103CCR
大数据·人工智能·缓存
IT界的老黄牛6 小时前
停电后 Redis 集群两节点起不来:fix 完还报 Bad file format?多部分 AOF 修复的正确姿势
运维·redis·缓存
许彰午9 小时前
CacheSQL:一个面向政务系统的内存缓存数据库中间件
java·数据库·缓存·中间件·面试·开源软件·政务
Lyyaoo.9 小时前
Session粘滞性问题->Redis实现session共享
数据库·redis·缓存
倚楼盼风雨10 小时前
Redis 为什么快
数据库·redis·缓存
6Hzlia10 小时前
Hot 100 刷题计划】 LeetCode 146. LRU 缓存 | C++ 哈希表+双向链表
c++·leetcode·缓存
Controller-Inversion10 小时前
146. LRU 缓存
缓存
yuzhiboyouye10 小时前
java redis(缓存)
java·redis·缓存
TechWayfarer1 天前
IP归属地运营商生产落地进阶:缓存+降级+灰度对账全解析
网络·python·网络协议·tcp/ip·缓存