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

相关推荐
流星白龙15 小时前
【Redis】4.基本全局命令
数据库·redis·缓存
流星白龙18 小时前
【Redis】3.Redis安装与命令行客户端
数据库·redis·缓存
我不想名字重复1 天前
redis缓存和数据库数据保持一致
数据库·redis·缓存
时空无限1 天前
vllm 大模型启动缓存相关环境变量 export
linux·缓存·vllm
流星白龙1 天前
【Redis】6.计数其他命令
数据库·redis·缓存
正儿八经的少年1 天前
redis 的大 key 和热 key 详解
数据库·redis·缓存
X-⃢_⃢-X1 天前
十、Redis之布隆过滤器
数据库·redis·缓存
Database_Cool_1 天前
阿里云 Tair(企业级内存数据库)vs 腾讯云 Redis 云缓存深度对比:性能/数据结构/成本全维度 Benchmark
数据库·阿里云·缓存
流星白龙1 天前
【Redis】1.Redis特性
数据库·redis·缓存
chexus1 天前
21. 深入 Nginx HTTP 缓存源码:CDN功能
nginx·http·缓存