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

相关推荐
闪电悠米3 小时前
黑马点评-Redis 消息队列-03_stream_consumer_group
开发语言·数据库·redis·分布式·缓存·junit·lua
qqxhb3 小时前
47|成本与性能:缓存、批处理、模型路由与降级
缓存·批处理·智能模型路由·多级降级预案·成本预算
叶小鸡8 小时前
Java 篇-项目实战-AI 天机学堂(从 0 到 1)-day5
数据库·redis·缓存
大模型最新论文速读8 小时前
小红书提出 RedKnot:分头处理 kv 缓存,延时降低 60%效果还提升
论文阅读·人工智能·深度学习·机器学习·缓存·自然语言处理
大囚长10 小时前
大模型API的上下文缓存(Contextual Cache)
人工智能·缓存
小二·11 小时前
Redis 7 分布式缓存架构实战
redis·分布式·缓存
一拳一个娘娘腔13 小时前
CVE-2026-43284 — Dirty Frag 深度拆解:当零拷贝遇上原地解密,页缓存成了攻击者的画板
linux·缓存
lx1885486989613 小时前
Redis大Key阻塞:单线程CPU100%的致命陷阱
数据库·redis·缓存
IT策士13 小时前
Redis 从入门到精通:位图、HyperLogLog、GEO
数据库·redis·缓存
布局呆星14 小时前
Spring Boot + Redis 缓存实战:@Cacheable、序列化踩坑、缓存一致性,一次讲透
spring boot·redis·缓存