背景介绍:
前面几篇文章,我们主要介绍了二级缓存架构的演进过程,本次文章将实战演练下整个过程,进一步熟悉二级缓存架构,本次演练的架构图如下:
当然了,这只是最基础的二级缓存架构,还有很多优化空间,如果你感兴趣,可以持续关注本头条号……
如果你理解上有困难,可以关注后面发布的视频,视频讲解可能更能容易理解,因为有时候文字可能表现力不够,有什么问题尽快提出来,期待您的参与……
前言:基本环境搭建
1、mysql环境搭建
推荐大家下载phpstudy一键安装包,直接网上搜索下载安装即可,
安装成功后,我们启动mysql
如果你还不清楚怎么用,可以参考这篇文章:快速建立php的Windows开发环境
2、连接mysql,导入sql语句
连接mysql的工具,推荐大家使用Navicat,这是很普通的一个工具这里我们就不过多介绍了
首先我们建立数据库:jikeh,然后建立如下数据表:
-- ----------------------------
-- Table structure for ad
-- ----------------------------
DROP TABLE IF EXISTS `ad`;
CREATE TABLE `ad` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(60) DEFAULT NULL,
`price` bigint(20) DEFAULT NULL,
`destination_url` varchar(255) DEFAULT NULL,
`img_url` varchar(100) DEFAULT NULL,
`start_time` bigint(20) DEFAULT NULL,
`end_time` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
3、redis环境搭建,连接redis,使用redis客户端
如果你不熟悉,可以参考这篇文章:缓存架构之SpringBoot集成redis并结合ehcache实现二级缓存架构
一、广告管理系统演练测试
1)代码仓库:这个代码完全可以运行成功,本地演示过
https://gitee.com/jikeh/JiKeHCN-RELEASE.git
2)项目名
spring-boot-ad
3)项目启动
(1)配置数据库连接环境
spring.datasource.url=jdbc:mysql://localhost:3306/jikeh?serverTimezone=UTC&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
(2)右键run即可启动项目
4)访问测试
http://localhost:1111/ad-manage/ads
5)核心代码
(1)广告的增删改查操作
@Service public class AdServiceImpl implements AdService { @Autowired private AdMapper adMapper; @Override public List<Ad> findByAd(Ad ad, Integer offset, Integer limit) { RowBounds rowBounds = RowBounds.DEFAULT; if(offset != null && limit != null){ rowBounds = new RowBounds(offset, limit); } return adMapper.selectByAd(ad, rowBounds); } @Override public Ad findById(Long id) { return adMapper.selectByPrimaryKey(id); } @Override public boolean saveOrUpdate(Ad ad) { if(ad.getId() == null){ return adMapper.insert(ad) == 1; } else { return adMapper.updateById(ad) == 1; } } @Override public boolean deleteById(Long id) { if(id == null){ throw new NullPointerException("id"); } return adMapper.deleteById(id) == 1; } }
注释:这就是基本的增删改查操作
如果你连这都不会,可以参考我之前发布的文章:
(2)对外提供接口功能
@Controller @RequestMapping("/api") public class ApiController { @Autowired AdService adService; /** * 对外提供查询广告的接口:http://localhost:1111/ad-manage/api/getAd?adId=1 * @param adId * @return */ @RequestMapping(value = "getAd", method = RequestMethod.GET) @ResponseBody public String getAd(Long adId){ Ad ad = adService.findById(adId); return JSONObject.toJSONString(ad); } }
(3)对外提供接口功能测试
http://localhost:1111/ad-manage/api/getAd?adId=1
二、广告系统演练测试
1)代码仓库
https://gitee.com/jikeh/JiKeHCN-RELEASE.git
2)项目名
spring-boot-ehcache-redis-db
3)项目启动
(1)前提是你已经启动redis服务器
(2)启动:右键直接启动就好了
4)访问测试
下面有联合演练过程
三、ehcache-redis-db三级联调测试
1)ehcache缓存不存在、redis缓存不存在,直接调用db
第一次调用:http://localhost:8088/getAd?adId=1
打印结果:
执行上述调用之后:ehcache会刷入数据、redis会刷入数据
2)ehcache缓存存在
第二次调用:http://localhost:8088/getAd?adId=1
打印结果:
没有任何输出,
说明:第二次调用读取的是ehcache本地缓存
3)ehcache缓存不存在,redis缓存存在
等ehcache缓存过期了之后,再次调用:http://localhost:8088/getAd?adId=1
打印结果:
说明:ehcache缓存不存在,而redis缓存存在,所以没有走db
总结:上述演练过程,我们就基本了解了当前架构的流程,二级缓存架构从一定程度上环节高并发的压力,但是这还是不够的,还是很有很多问题的,接下来的几篇文章我们继续优化该系统!
本文暂时没有评论,来添加一个吧(●'◡'●)