使用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)启动任务并测试

相关推荐
手握风云-8 分钟前
Redis:不只是缓存那么简单(十六)
缓存
驾驭人生17 小时前
Hangfire.Redis.StackExchange 已归档停更!生产任务卡死、重复执行、网络抖动问题解决方案
数据库·redis·缓存
TDengine (老段)18 小时前
TDengine Catalog 与元数据缓存
大数据·数据库·物联网·缓存·时序数据库·tdengine
hui-梦苑21 小时前
[Gromacs]核心性能梯度测试:GROMACS 多线程性能调优实验
缓存·性能优化·多线程·gromacs·动力学模拟
Lyyaoo.1 天前
【链表】【中等】两数相加/倒N删除/两个交换/排序链表/LRU缓存
数据结构·链表·缓存
努力努力再努力wz1 天前
【Redis入门系列】:从 RESP 协议到 redis-plus-plus:Redis 客户端编程与 C++ 接口设计
开发语言·数据库·c++·redis·分布式·缓存·架构
OH_TPC2 天前
【鸿蒙优选三方库】@react-native-ohos/react-native-fast-image:高性能图片加载与缓存组件
缓存·华为·harmonyos·鸿蒙
liangshanbo12152 天前
手写 Event Emitter(事件发射器)
缓存
数智启示录2 天前
Apache Kafka Consumer 扩到 40 个仍不提速:Partition 上限锁死有效并行度 【Kafka合集】
数据库·经验分享·分布式·缓存·面试·kafka·apache
2601_962297252 天前
python自带缓存lru_cache用法及扩展的使用_python
python·缓存·装饰器·lru_cache·my_cache