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缓存相关推荐

  1. redis 依赖_springboot|springboot集成redis缓存

    javaDEMO 本网站记录了最全的各种JavaDEMO ,保证下载,复制就是可用的,包括基础的, 集合的, spring的, Mybatis的等等各种,助力你从菜鸟到大牛,记得收藏哦~~https: ...

  2. SpringBoot集成Cache缓存(Redis缓存,RedisTemplate方式)

    1.说明 SpringBoot集成Redis缓存, 首先创建一个Spring Boot工程, 使用Maven向导方式创建:SpringBoot集成Maven工程 然后引入redis的spring bo ...

  3. Spring Boot 集成 Redis 缓存

    Spring Boot 集成 Redis 缓存 在此章,我们将 SpringBoot 集成 Redis 缓存,Redis是一个开源的,基于内存的数据结构存储,可以用作数据库.缓存和消息代理,在本章仅讲 ...

  4. springboot mybatis ehcache_SpringBoot入门建站全系列(十四)集成Redis缓存

    SpringBoot入门建站全系列(十四)集成Redis缓存 一.概述 本地缓存,就是使用应用内使用本地内存将数据暂缓存储,一般数据库的查询如果不怎么改动,可以用本地缓存暂存. 远程缓存,比如redi ...

  5. SpringBoot集成Redis用法笔记

    今天给大家整理一下SpringBoot集成Redis用法笔记,希望对大家能有所帮助! 一.Redis优点介绍 1.速度快 不需要等待磁盘的IO,在内存之间进行的数据存储和查询,速度非常快.当然,缓存的 ...

  6. springboot集成redis使用redis作为session报错ClassNotFoundException类RememberMeServices

    springboot 集成redis使用redis作为缓存,会报错的问题. 错误信息: java.lang.IllegalStateException: Error processing condit ...

  7. SpringBoot集成Cache缓存(Ehcache缓存框架,注解方式)

    1.说明 Spring定义了CacheManager和Cache接口, 用来统一不同的缓存技术, 例如JCache,EhCache,Hazelcast,Guava,Redis等. 本文通过Spring ...

  8. SpringBoot集成Redis笔记-动力节点王鹤

    关于springboot集成redis,我做了笔记,分享给小伙伴们,视频看的动力节点王鹤老师讲的, 动力节点王鹤老师讲解的springboot教程,由浅入深,带你体验Spring Boot的极速开发过 ...

  9. SpringBoot集成Redis并使用Knife4j测试

    SpringBoot集成Redis并使用Knife4j测试 基于若依的ruoyi-vue前后端分离版本,若依官网:http://www.ruoyi.vip/ 项目目录结构 项目的目录结构如下: 1.新 ...

最新文章

  1. 一维码EAN 8简介及其解码实现(zxing-cpp)
  2. SAP MM 对于MRKO事务代码的几点优化建议
  3. Geometers Anonymous Club CodeForces - 1195F (闵可夫斯基和)
  4. 内置装饰器一:@classmethod、@staticmathod
  5. 短视频未来3年的规模为3万亿元
  6. Shell脚本编程总结
  7. C#弹窗提示并自动关闭方法
  8. HTTP/1.1 Range和Content-Range
  9. 三菱fx5u modbus tcp fb块用法_三菱PLC型号怎么选?四大方面告诉你三菱FX3U和5U的最大区别!...
  10. CSS基本知识之盒子模型
  11. win10cmd重置系统_命令提示符修复系统win10 系统还原
  12. matlab quadratic,请教几个quadratic programming的问题
  13. 微博做内容和收入来源
  14. 《转载》o(1), o(n), o(logn), o(nlogn) 是什么含义?
  15. 计算机毕业设计JavaVue.js音乐播放器设计与实现(源码+系统+mysql数据库+lw文档)
  16. 批量制作带LOGO的网址二维码
  17. WiFi密码忘记?电脑密码忘记?
  18. C语言中的复制函数(strcpy和memcpy)
  19. <3>【深度学习 × PyTorch】必会 线性代数 (含详细分析):点积 | 矩阵-向量积 | Hadamard积 | 矩阵乘法 | 范数/矩阵范数
  20. ctfshow 萌xin赛

热门文章

  1. plsql提示列快捷键_PLsql快捷键
  2. ajax nginx 转发 sessionid_「查缺补漏」巩固你的Nginx知识体系
  3. feign post 传递空值_http中post和get的区别和联系
  4. 修改mysql默认字符集的方法
  5. 谷粒商城基础篇爬坑笔记--项目导入intellij IDEA后pom.xml无法识别为maven文件和程序包import com.atguigu.common.XXX不存在两个问题解决方法
  6. sentos7查看网络配置_论各厂商设备之基础常用配置命令集
  7. Spring容器的底层实现
  8. SpringMVC框架第一天
  9. 学习Scala: 初学者应该了解的知识
  10. Eclipse无提示的解决办法 和 内容辅助技巧