06-整合Redis

作者: 郭艺宾 | 来源:发表于2018-10-16 10:49 被阅读404次

    前面讲了如何整合 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

    相关文章

      网友评论

        本文标题:06-整合Redis

        本文链接:https://www.haomeiwen.com/subject/ncgczftx.html