作者:极客慧
原文地址:https://www.toutiao.com/a6603712732548039175
一、背景介绍
前面几篇文章,我们主要介绍了二级缓存架构的演进过程,并实战演练了二级缓存架构实例,本篇文章我们将分享什么呢?缓存预热、缓存更新
特别提醒:最近发的文章是个系列文章,如果没有看之前发布的一些文章,操作上可能会遇到困难,讲过的东西,不会再重复讲,否则一篇文章会过于长了,当然你有任何问题,都可以在下方留言,我会尽可能的解答你的疑问
先看如下架构图:
我们要实现的功能就是使用分布式定时任务框架Elastic Job定时拉取db数据并刷新到redis中,实现缓存预热、缓存更新的功能
那什么是缓存预热、缓存更新呢?
缓存预热:缓存预热就是系统上线后,将相关的缓存数据直接加载到缓存系统。这样就可以避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据!
我们的解决思路就是采用的定时刷新缓存,我们使用Elastic Job不仅可以定时出发,而且还可以在任意时刻在管控台进行手动出发,是不是相当方便,如果想知道具体怎么用,请继续往下读……
缓存更新:我们一般进行redis缓存的时候,都会设置缓存的过期时间,这样可以实现无效key的自动删除,不用手动自己来清除无效key;既然缓存会过期,那我们肯定要采用某种策略来实现缓存的全量更新,我们的解决思路就是通过定时任务实现缓存的定时全量更新
二、核心系统介绍
技术框架:springboot、redis、Elastic Job
代码仓库:这个代码完全可以运行成功,本地演示过
https://gitee.com/jikeh/JiKeHCN-RELEASE.git
项目名
spring-boot-ad——广告管理系统
spring-boot-redis-elastic-job——定时任务系统
1、Elastic Job是什么
其实之前发布的几篇文章已经详细介绍了Elastic Job的具体使用,并实战演练了具体操作,有文章教程,也有视频教程,如果你想进一步了解Elastic Job的具体使用,可以移步到如下地方,然后再回来继续往下看:
分布式定时任务框架Elastic-Job实战
重点关注Elastic Job管控台的安装与使用:分布式定时任务框架Elastic-Job控制台安装&使用
2、广告管理系统(spring-boot-ad)中增加一个全量查询广告数据的接口
之前我们已经介绍了该系统的搭建:缓存架构之SpringBoot搭建广告管理系统雏形 为redis提供源数据
1)增加一个控制器方法
2)mapper中增加一个方法,.xml文件中也增加相应的方法
3、定时任务系统(spring-boot-redis-elastic-job)
1)添加Elastic Job依赖
2)Elastic Job配置
(1)注册中心配置:zookeeper
(2)job任务配置
properties配置:
3)Elastic Job任务
三、实战操作演练
1、启动zookeeper
关于zookeeper的使用,如果你不清楚,可以参考之前发布的文章:Windows下安装zookeeper
这里仅讲下使用:Windows下双击该命令即可启动
2、启动Elastic Job管控台
关于管控台的使用,如果你不清楚,可以参考之前发布的文章:分布式定时任务框架Elastic-Job控制台安装&使用
这里仅讲下使用:Windows下双击该命令即可启动
启动后,访问:http://localhost:8899/,即可进入管控台
3、启动广告管理系统
项目名:spring-boot-ad
直接运行run,即可启动我们的项目
4、启动定时任务系统
项目名:spring-boot-redis-elastic-job
我们这里设置的是每5分钟执行一次,你可以根据实际场景进行合理的设置
1)将我们的定时任务配置到管控台以便我们在管控台上可以直接手动触发任务
2)直接运行run,即可启动定时任务系统
管控台上的显示:
5、启动redis客户端
如果你没有合适的redis客户端,可以参看我之前发布的文章介绍:redis客户端 可视化界面
先清空redis数据,5分钟之后,观察redis中是否已经有数据了==>定时任务正常执行;
再次清空redis数据,进入Elastic Job管控台,手动触发任务,再观察redis中是否已经有数据了==>手动出发功能正常;
在我们的广告管理系统上新建一个广告,5分钟之后,观察redis中是否已经有该广告数据了==>定时任务正常执行;
四、下节预告
借助消息中间件实现edis缓存的实时更新r,也就是完成如下架构:
---------------END----------------
后续的内容同样精彩
长按关注“IT实战联盟”哦
注意:本文归作者所有,未经作者允许,不得转载