springboot-webflux学习(转)(完)

07-Redis实现缓存

2018-10-16  本文已影响47人  郭艺宾

新建一个工程编写整合 Redis 实现缓存案例,工程如图:

可以看到添加了三个依赖组件,包含持久层的数据库,缓存的reids。

然后看项目结构:

目录核心如下:

pom.xml maven 配置

application.properties 配置文件

domain 实体类

dao mongodb数据操作层

handler 业务层,本文要点

controller 控制层

City代码:

dao层代码:

控制层 CityWebFluxController,代码如下:

CityHandler 业务层

目前,@Cacheable 等注解形式实现缓存没有很好的集成,二者 Mono / Flux 对象没有实现 Serializable,无法通过默认序列化器,解决方式是需要自定义序列化,这里通过手动方式与 Redis 手动集成,并实现缓存策略。

缓存更新的模式有四种:Cache aside、Read through、Write through、Write behind caching。

这里使用的是 Cache Aside 策略,从三个维度:

失效:应用程序先从 Cache 取数据,没有得到,则从数据库中取数据,成功后,放到缓存中。

命中:应用程序从 Cache 中取数据,取到后返回。

更新:先把数据存到数据库中,成功后,再让缓存失效。

代码如下:

上面两张图是类的完整代码。

首先这里注入了 RedisTemplate 对象,联想到 Spring 的 JdbcTemplate ,RedisTemplate 封装了 RedisConnection,具有连接管理,序列化和 Redis 操作等功能,还有针对 String 的支持对象 StringRedisTemplate。

回到更新缓存的逻辑。

a. findCityById 获取城市逻辑:

        如果缓存存在,从缓存中获取城市信息;

        如果缓存不存在,从 DB 中获取城市信息,然后插入缓存。

b. deleteCity 删除 / modifyCity 更新城市逻辑:

        如果缓存存在,删除;

        如果缓存不存在,不操作。

运行工程

一个  Spring Boot WebFlux 工程就开发完毕了,下面运行工程验证下。在 IDEA 中执行 Application 类启动,任意正常模式或者 Debug 模式,可以在控制台看到成功运行的输出:

新增城市信息 POST http://127.0.0.1:8007/city:

获取城市信息 GET http://127.0.0.1:8007/city/7:

可以看到城市插入缓存。

再执行一次:

可以看到这次是从缓存中查的。

可见,第一次是从数据库 MongoDB 获取数据,并插入缓存,第二次直接从缓存中取。

更新 / 删除城市信息,这两种操作中,如果缓存有对应的数据,则删除缓存。可以自行测试接口查看结果。

总结

这一讲,主要讲了缓存更新策略及实际应用小例子。

原文:https://gitbook.cn/gitchat/column/5acda6f6d7966c5ae1086f2b/topic/5acdaa62d7966c5ae108708a

代码:https://gitee.com/blueses/springboot-webflux

上一篇下一篇

猜你喜欢

热点阅读