玩转 SpringBoot2.x 之缓存对象
前言
提到Redis 大部分的人首先想到的可能就是缓存,那么在 Java 项目中如何把对象缓存起来呢?这就是本文接下来要介绍的内容:缓存对象。本文通过SpringBoot 项目带你快速了解通过Jedis 把对象缓存到Redis中。
阅读本文需要你了解如何搭建 SpringBoot 项目即可,另外需要了解的是本文SpringBoot 版本是 2.1.0.RELEASE。关于SpringBoot 集成 Jedis 请参考:玩转 SpringBoot 2.x 之 快速集成 Jedis客户端(普通版)
接下来就让我们开始具体的代码案例介绍吧!
代码案例
演示通过将下面的 User 类创建的对象缓存到 Redis 中,具体有2种方式:序列化、Json。User 类具体代码如下:
关于 过期时间处理和返回Jedis 线程操作到线程池操作封装到了 JedisCacheServiceSupport 中,具体代码如下:
序列化方式
序列化的方式通过现将对象转换成二进制的流(序列化)后保存到 Redis 中,然后通过key 获取到二进制,在把二进制流转换成对象(反序列化)。
保存对象的具体操作如下:
通过 ObjectOutputStream.writeObject(object)
将User 对象转换成byte 数组,然后通过 psetex(byte[] key, long milliseconds, byte[] value)
将 byte[] 数组存入Redis中。其中
- byte[] key:需要将key 转换成byte数组。
- long milliseconds:是对象在Redis 中存活的时间,以毫秒为单位。
- byte[] value:对象转换成的btye 数组。
获取对象的具体操作如下:
通过 get(byte[] key)
获取 User 对象转换的byte 数组,然后通过 ObjectInputStream.readObject()
将数组转换成User对象。
通过序列化方式保存和获取对象具体代码如下:
关闭 输入流和输出流工具类具体代码如下:
序列化方式演示
测试 JedisCacheService putObject(将对象放入缓存中)、getObject(从缓存中获取对象),具体代码如下:
putObject 日志信息:
getObject 日志信息:
Json 方式
Json 的方式是将对象转换成可阅读的Json 串后保存到 Redis 中,然后通过key 获取到Json 串,在把Json 串成对象。对象转成成Json串是通过谷歌的Gson 完成的,所以需要引入Gson的依赖,具体依赖代码如下:
Json 保存对象的具体操作如下:
通过 Gson.toJson(Object src) 将User 对象转换成 Json串,然后通过 psetex(String key, long milliseconds, String value)
将 Json串存入Redis中。
Json 获取对象的具体操作如下:
通过 get(String key)
获取 User 对象的Json串,然后通过 Gson.fromJson(String json, Class<T> classOfT)
将Json串转换成User对象。
通过Json 方式保存和获取对象具体代码如下:
序列化方式演示
测试 JedisJsonCacheServiceTest putObject(将对象放入缓存中)、getObject(从缓存中获取对象),具体代码如下:
putObject 日志信息:
getObject 日志信息:
小结
序列化和Json这2种方式,在实际开发中可以根据你的喜好自行选择。Json 方式使用的是Gson 当然你也可以使用 FastJson ,序列化采用了 Java 原生的序列化和反序列化,同时你也可以切换成效率更高的 Hessian 进行序列化和反序列化。
代码示例
我本地环境如下:
- SpringBoot Version: 2.1.0.RELEASE
- Apache Maven Version: 3.6.0
- Java Version: 1.8.0_144
- IDEA:IntellJ IDEA
操作过程如出现问题可以在我的GitHub 仓库 springbootexamples 中模块名为 spring-boot-2.x-redis-jedis-objectcache 项目中进行对比查看
GitHub:https://github.com/zhuoqianmingyue/springbootexamples
版权声明: 本文为 InfoQ 作者【zhuoqianmingyue】的原创文章。
原文链接:【http://xie.infoq.cn/article/ac8bdb49ffb1b3880a5eb887b】。文章转载请联系作者。
评论