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

相关推荐
Geoking.40 分钟前
Redis 的 RDB 与 AOF:持久化机制全解析
数据库·redis·缓存
myloveasuka3 小时前
分离指令缓存(I-Cache)和数据缓存(D-Cache)的原因
笔记·缓存·计算机组成原理·硬件
想搞艺术的程序员4 小时前
架构破局 - Redis 不再做缓存!替代 MySQL 做主存储
redis·缓存·架构
2401_841495646 小时前
【LeetCode刷题】LRU缓存
数据结构·python·算法·leetcode·缓存·lru缓存·查找
醒过来摸鱼6 小时前
redis源码deps目录
数据库·redis·缓存
Huanlis7 小时前
Redis Stream 核心原理与实战指南
数据库·redis·缓存
J_liaty7 小时前
XXL-Job 实现分布式定时任务
分布式·xxl-job
青春男大21 小时前
Redis和RedisTemplate快速上手
java·数据库·redis·后端·spring·缓存
十月南城1 天前
Nginx与网关配置观——超时、限流、TLS与代理缓存的原则化清单
运维·nginx·缓存
醒过来摸鱼1 天前
Redis 源码分类
数据库·redis·缓存