精品推荐:缓存架构之实战演练Elastic Job定时实现redis缓存预热、缓存更新

PHP是最好的 2018-10-17 17:52:17 ⋅ 852 阅读

作者:极客慧

原文地址: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实战联盟”哦




全部评论: 0

    我有话说:

    架构实战篇:MyBatis一级、二级,并整合ehcache分布式缓存的使用,附演示实例

    ehcache是一个纯Java的进程内缓存框架,是一种广泛使用的开源Java分布式缓存,具有快速、精干等特点,是Hibernate中默认的CacheProvider。

    高性能缓存架构设计(超实用

    缓存虽然能够大大减轻存储系统的压力,但同时也给架构引入了更多复杂性。

    精品推荐:微服务架构下静态数据通用缓存机制

    在分布式系统中,特别是最近很火的微服务架构下,有没有或者能不能总结出一个业务静态数据的通用缓存处理机制或方案,这篇文章将结合一些实际的研发经验,尝试理清其中存在的关键问题以及探寻通用的解决道。

    架构实战篇(十四):Spring Boot 多缓存实战

    多场景下的不同缓存策略解决方案

    缓存架构设计要点

    缓存的典型应用场景和设计要点

    微信小程序微商城(八):缓存实现商品购物车功能

    商品详情页将商品信息放入缓存,购物车页面读取缓存获取商品信息,购物车商品计算和删除缓存商品

    京东技术:Flutter图片缓存 | Image.network源码分析

    Android目前提供了很丰富的图片框架,像ImageLoader、Glide、Fresco等。对于Flutter而言,为了探其缓存机制或者定制自己的缓存框架,特从其Image入手进行突破。

    Spring Boot 缓存之内嵌H2数据库

    本文手把手教你 怎么用 H2 数据库当做缓存来使用增强系统性能

    Elasticsearch 7.11.2 发布,提升缓存效率

    Elasticsearch 7.11.2 正式发布,此次更新内容如下: 增强 提高碎片级请求缓存效率 #69505 Bug 修复 聚合 修正用 doc_count 执行过滤器的过滤器

    架构实战篇:使用MyBatis延迟加载模式为数据库减压,附演示实例

    MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟规则推迟对关联对象的select查询。延迟加载可以有效的减少数据库压力......

    SpringBoot+zk+dubbo架构实践(一):本地部署zookeeper

    SpringBoot+zk+dubbo架构实践系列实现目标:自己动手搭建微服务架构

    Redis系列四 锁

      本文目标 1. 熟悉乐观锁ABA概念 2. 理解掌握redis事务以及watch回滚; 3. 实战redis锁 乐观锁 乐观锁是一种不会阻塞其他线程并发的机制,它不会使用数据库的

    HTTP/2.0 服务器推送实现

    HTTP/2允许服务器在请求之前先推送响应信息到客户端(之前客户端有过请求),如果实现了HTTP缓存,推送的响应信息可以在客户端被缓存(可通过no-cache进行配置)。

    Redis系列二:位图实战,实现打卡签到

    前言 如果要统计一篇文章的阅读量,可以直接使用 Redis 的 incr 指令来完成。 如果要求阅读量必须按用户去重,那就可以使用 set 来记录阅读了这篇文章的所有用户 id,获取

    架构设计原则 - 高并发

    高并发设计可以从以下几方面考虑:无状态拆分服务化消息队列数据异构缓存并发化1. 无状态无状态的应用容易进行水......

    Redis多线程演进

    Redis作为一个基于内存的缓存系统,一直以高性能著称,因没有上下文切换以及无锁操作,即使在单线程处理情况下,读速度仍可达到11万次/s,写速度达到8.1万次/s。但是,单线程的设计也给Redis

    「轻阅读」微博推荐架构演进

    微博两个核心基础点:一是用户关系构建,二是内容传播,微博推荐一直致力于优化这两点,促进微博发展。