06-整合Redis
前面讲了如何整合 MongoDB,这里继续讲如何操作 Redis 这个数据源,那什么是 Reids?
Redis 是一个高性能的 key-value 数据库。GitHub 是这么描述的:
Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, HyperLogLogs, Bitmaps.
Redis 是内存式数据库,存储在磁盘,支持的数据类型很多:Strings、Lists、Sets、Sorted Sets、Hashes、HyperLogLogs、Bitmaps 等。具体文档和安装参见相关资料,此处直接使用已经安装好的redis。
下面开始写代码。
首先创建项目:
从上面可以看到添加了两个组件依赖。
工程结构如图:
目录核心如下:
1 pom.xml maven 配置
2 application.properties 配置文件
3 domain 实体类
4 controller 控制层,本文要点
类似 MongoDB 配置,在 application.properties 配置连接 Redis:
对象City代码如下:
值得注意点:
1 @Id 注解标记对应库表的主键或者唯一标识符。因为这个是我们的 DO,数据访问对象一一映射到数据存储。
2 City 必须实现序列化,因为需要将对象序列化后存储到 Redis。如果没实现 Serializable,会引出异常:java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type。
3 如果不使用默认的序列化,需要自定义序列化实现,只要实现 RedisSerializer 接口去实现即可,然后在使用 RedisTemplate.setValueSerializer 方法去设置你实现的序列化实现,支持 JSON、XML 等。
控制层 CityWebFluxController,代码如下:
代码详解:
1 使用 @Autowired 注入 RedisTemplate 对象,这个对象和 Spring 的 JdbcTemplate 功能十分相似,RedisTemplate 封装了 RedisConnection,具有连接管理、序列化和各个操作等,还有针对 String 的支持对象 StringRedisTemplate。
2 删除 Redis 某对象,直接通过 key 值调用 delete(key)。
3 Redis 操作视图接口类用的是 ValueOperations,对应的是 Redis String/Value 操作,get 是获取数据;set 是插入数据,可以设置失效时间,这里设置的失效时间是 60 s。
4 还有其他的操作视图,ListOperations、SetOperations、ZSetOperations 和 HashOperations。
运行工程
一个 Spring Boot WebFlux 工程就开发完毕了,下面运行工程验证下。在 IDEA 中执行 Application 类启动,任意正常模式或者 Debug 模式,可以在控制台看到成功运行的输出:
打开 Postman。进行下面操作:
新增城市信息 POST http://127.0.0.1:8006/city:
获取城市信息 GET http://127.0.0.1:8006/city/2:
如果等待 60s 以后,再次则会获取为空,因为保存的时候设置了失效时间是 60 s。
注意:RedisTemplate 实现操作 Redis,但操作是同步的,不是 Reactive 的。自然,支持 Reactive 的操作类为 ReactiveRedisTemplate。
下面写个小案例,新建 CityWebFluxReactiveController 类,路由为 /city2 开头:
写法和以前保持一致,@Autowired 注入 ReactiveRedisTemplate 对象。
ReactiveValueOperations 是 String(或 value)的操作视图,操作视图还有 ReactiveHashOperations、ReactiveListOperations、ReactiveSetOperations 和 ReactiveZSetOperations 等。
不一样的是,操作视图 set 方法是操作 City 对象,但可以 get 回 Mono 或者 Flux 对象。
可以自行测试上面几个接口,过程略。。。
总结
这里探讨了 Spring WebFlux 的如何整合 Redis,介绍了如何通过 RedisTemplate 去操作 Redis。因为 Redis 在获取资源性能极佳,常用 Redis 作为缓存存储对象,下面我们利用 Reids 实现缓存操作。
原文:https://gitbook.cn/gitchat/column/5acda6f6d7966c5ae1086f2b/topic/5acdaa47d7966c5ae108707b
代码:https://gitee.com/blueses/springboot-webflux