SpringBoot集成Redis缓存
SpringBoot集成Redis缓存
前言
本系列文章将简单的学习SpringCloud微服务相关知识,其实也是因为时间的原因,一直拖到现在,遂打算趁着假期,决定记录下来。
从天气预报微服务系统的单体架构——>分布式架构的演变过程中,一步一步,由浅及深的学习SpringCloud微服务的思想与其实现的组件。
本系列文章分为以下几个章节:
- SpringBoot搭建天气预报微服务系统(单体架构)
- SpringBoot集成Redis缓存
- SpringBoot集成Quartz定时框架
- SpringBoot结合Thymeleaf模板与Bootstrap快速搭建界面
- 单体架构到微服务架构的拆分
- SpringCloud微服务组件—Eureka服务注册与发现
- SpringCloud微服务组件—Feign负载均衡与高可用
- SpringCloud微服务组件—Zuul实现API网关分配
- SpringCloud微服务组件—Config集中实现配置管理
- SpringCloud微服务组件—Hystrix服务熔断机制
项目源码已上传至Github.
开发环境
- JDK 1.8
- IDEA 2017.3
- Gradle 4
- HttpClient 4.5.3
- Redis 3.2
- SpringBoot 2.0.0.RELEASE
//依赖关系
dependencies {//该依赖用于编译阶段compile('org.springframework.boot:spring-boot-starter-web')//HttpClientcompile('org.apache.httpcomponents:httpclient:4.5.3')//Rediscompile('org.springframework.boot:spring-boot-starter-data-redis')//该依赖用于测试阶段testCompile('org.springframework.boot:spring-boot-starter-test')
}
为什么是Redis
我们知道Redis是一种key-value类型的缓存数据库,是存储在内存中的非关系型轻量级的数据库。在日常的开发中,我们可以选择一些资源数据来存入Redis中,以提高系统的流畅与并发性。
而在天气预报系统中,我们知道天气数据其实并不是每时每刻的在更新的。如果你留心观察,你会发现,它们是以每半小时或者一小时的频率来进行更新的。如果我们将天气数据存入缓存中,每次调用API时,首先查询本地缓存中是否存在天气数据,假如存在,就从Redis的缓存中去请取;如果不存在,那我们再调用第三方借口提供的API就行查询,并将数据存入Redis中,方便下次请求调用。
如何加入Redis
WeatherDataServiceImpl
在我们之前的项目基础上进行添加与修改。
@Service
public class WeatherDataServiceImpl implements WeatherDataService {private static final Logger logger = LoggerFactory.getLogger(WeatherDataServiceImpl.class);private static final String WEATHER_URI = "http://wthrcdn.etouch.cn/weather_mini?";private static final long TIME_OUT = 1800L;//1800s@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Overridepublic WeatherResponse getDataByCityId(String cityId) {String uri = WEATHER_URI + "citykey=" + cityId;return this.doGetWeather(uri);}@Overridepublic WeatherResponse getDataByCityName(String cityName) {String uri = WEATHER_URI + "city=" + cityName;return this.doGetWeather(uri);}/*** 重构代码* @param uri* @return*/private WeatherResponse doGetWeather(String uri) {String key = uri;String strBody = null;ObjectMapper mapper = new ObjectMapper();WeatherResponse resp = null;ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();//先查缓存,如果缓存中有天气信息就在缓存中取if (stringRedisTemplate.hasKey(key)) {logger.info("Redis has data");strBody = ops.get(key);} else {logger.info("Redis don't has data");//如果缓存没有,再去调用服务接口来获取ResponseEntity<String> respString = restTemplate.getForEntity(uri,String.class);//将接口返回的Json字符串转换成对象if (respString.getStatusCodeValue() == 200) {strBody = respString.getBody();}//数据写入缓存ops.set(uri,strBody,TIME_OUT, TimeUnit.SECONDS);}try {resp = mapper.readValue(strBody,WeatherResponse.class);} catch (IOException e) {logger.info("Error!!",e);}return resp;}}
运行
输入http://localhost:8080/weather/cityId/101280601
,运行。
可以知道,
第一次查询Redis中是没有数据的,日志打印logger.info("Redis don't has data");
之后的查询中,数据已经存在于本地缓存中,日志打印logger.info("Redis has data");
我们通过Redis Desktop Manager也可以看到,缓存于Redis中的数据。
以上,我们就集成了Redis到了天气预报系统中,接下来我们将集成Quartz定时任务框架,来定时的调用缓存服务
SpringBoot集成Redis缓存相关推荐
- redis 依赖_springboot|springboot集成redis缓存
javaDEMO 本网站记录了最全的各种JavaDEMO ,保证下载,复制就是可用的,包括基础的, 集合的, spring的, Mybatis的等等各种,助力你从菜鸟到大牛,记得收藏哦~~https: ...
- SpringBoot集成Cache缓存(Redis缓存,RedisTemplate方式)
1.说明 SpringBoot集成Redis缓存, 首先创建一个Spring Boot工程, 使用Maven向导方式创建:SpringBoot集成Maven工程 然后引入redis的spring bo ...
- Spring Boot 集成 Redis 缓存
Spring Boot 集成 Redis 缓存 在此章,我们将 SpringBoot 集成 Redis 缓存,Redis是一个开源的,基于内存的数据结构存储,可以用作数据库.缓存和消息代理,在本章仅讲 ...
- springboot mybatis ehcache_SpringBoot入门建站全系列(十四)集成Redis缓存
SpringBoot入门建站全系列(十四)集成Redis缓存 一.概述 本地缓存,就是使用应用内使用本地内存将数据暂缓存储,一般数据库的查询如果不怎么改动,可以用本地缓存暂存. 远程缓存,比如redi ...
- SpringBoot集成Redis用法笔记
今天给大家整理一下SpringBoot集成Redis用法笔记,希望对大家能有所帮助! 一.Redis优点介绍 1.速度快 不需要等待磁盘的IO,在内存之间进行的数据存储和查询,速度非常快.当然,缓存的 ...
- springboot集成redis使用redis作为session报错ClassNotFoundException类RememberMeServices
springboot 集成redis使用redis作为缓存,会报错的问题. 错误信息: java.lang.IllegalStateException: Error processing condit ...
- SpringBoot集成Cache缓存(Ehcache缓存框架,注解方式)
1.说明 Spring定义了CacheManager和Cache接口, 用来统一不同的缓存技术, 例如JCache,EhCache,Hazelcast,Guava,Redis等. 本文通过Spring ...
- SpringBoot集成Redis笔记-动力节点王鹤
关于springboot集成redis,我做了笔记,分享给小伙伴们,视频看的动力节点王鹤老师讲的, 动力节点王鹤老师讲解的springboot教程,由浅入深,带你体验Spring Boot的极速开发过 ...
- SpringBoot集成Redis并使用Knife4j测试
SpringBoot集成Redis并使用Knife4j测试 基于若依的ruoyi-vue前后端分离版本,若依官网:http://www.ruoyi.vip/ 项目目录结构 项目的目录结构如下: 1.新 ...
最新文章
- 一维码EAN 8简介及其解码实现(zxing-cpp)
- SAP MM 对于MRKO事务代码的几点优化建议
- Geometers Anonymous Club CodeForces - 1195F (闵可夫斯基和)
- 内置装饰器一:@classmethod、@staticmathod
- 短视频未来3年的规模为3万亿元
- Shell脚本编程总结
- C#弹窗提示并自动关闭方法
- HTTP/1.1 Range和Content-Range
- 三菱fx5u modbus tcp fb块用法_三菱PLC型号怎么选?四大方面告诉你三菱FX3U和5U的最大区别!...
- CSS基本知识之盒子模型
- win10cmd重置系统_命令提示符修复系统win10 系统还原
- matlab quadratic,请教几个quadratic programming的问题
- 微博做内容和收入来源
- 《转载》o(1), o(n), o(logn), o(nlogn) 是什么含义?
- 计算机毕业设计JavaVue.js音乐播放器设计与实现(源码+系统+mysql数据库+lw文档)
- 批量制作带LOGO的网址二维码
- WiFi密码忘记?电脑密码忘记?
- C语言中的复制函数(strcpy和memcpy)
- <3>【深度学习 × PyTorch】必会 线性代数 (含详细分析):点积 | 矩阵-向量积 | Hadamard积 | 矩阵乘法 | 范数/矩阵范数
- ctfshow 萌xin赛
热门文章
- plsql提示列快捷键_PLsql快捷键
- ajax nginx 转发 sessionid_「查缺补漏」巩固你的Nginx知识体系
- feign post 传递空值_http中post和get的区别和联系
- 修改mysql默认字符集的方法
- 谷粒商城基础篇爬坑笔记--项目导入intellij IDEA后pom.xml无法识别为maven文件和程序包import com.atguigu.common.XXX不存在两个问题解决方法
- sentos7查看网络配置_论各厂商设备之基础常用配置命令集
- Spring容器的底层实现
- SpringMVC框架第一天
- 学习Scala: 初学者应该了解的知识
- Eclipse无提示的解决办法 和 内容辅助技巧