述
我们在实际的开发中,通常是需要spring集成redis,这里就以spring boot为例,整合redis,做一些常用的操作
环境准备
首先开启redis服务,可以用我们之前创建的集群,或者是开启一个单独的redis服务,并且开启远程连接,还是上篇文章的那三步
然后,新建一个Spring Boot的工程
建好工程之后,引入下面的依赖:
1 | <!-- redis依赖 --> |
配置修改
application.yml中的配置如下:
1 | spring: |
这里我直接使用上文中建的集群了,单个redis服务的话,直接用host和port设置就ok了,其他不变
StringRedisTemplate和RedisTemplate
Spring给了两个模板,一个是StringRedisTemplate一个是RedisTemplate,那具体应该用哪个呢
这个主要根据要存储的数据类型决定,key的话一般都是string,但是value我们可能放string也可能是放一个对象进去
所以,对于k-v都是String类型的话,那直接使用StringRedisTemplate就好了,也不需要什么配置,直接注入就可以使用了,这也是官方建议的
对于k-v是String,Object类型的话就用RedisTemplate,但是还需要自定义配置一下,这个下面再说
StringRedisTemplate的使用
这里我写了一个工具类,是一些基本的操作,代码如下:
1 | @Slf4j |
主要就是通过StringRedisTemplate对数据的一些基本操作,然后测试类测试一下:
1 | @Test |
控制台输出如下:
1 | 2019-04-26 14:19:32.525 INFO 4212 --- [ main] com.redis.example.AppTests : true |
可以看到数据能正常添加,查询
RedisTemplate
下面再来看一下RedisTemplate的一些操作
spring boot是不支持直接使用RedisTemplate的,需要我们自己做一些配置才可以使用,具体步骤如下
序列化
我们需要自己实现RedisSerializer<T>
接口来对传入对象进行序列化和反序列化,新建一个RedisObjectSerializer
类,代码如下:
1 | public class RedisObjectSerializer implements RedisSerializer<Object> { |
序列化的类搞定之后,需要在spring中配置一下RedisTemplate,代码如下:
1 | @Configuration |
配置完成之后就是测试环节了,定义一个User类供测试使用,代码如下:
1 | @Data |
然后就可以写单元测试来测试了,测试代码如下:
1 | @Autowired |
运行后,控制台输出如下:
1 | 2019-04-26 16:47:52.319 INFO 20444 --- [ main] com.redis.example.AppTests : 用户名:张三 |
在reids中,他的key和value都是经过序列化的,在到了java程序中,反序列化转成对象
总结对比
StringRedisTemplate 和 RedisTemplate的区别主要有以下几点:
- StringRedisTemplate继承了RedisTemplate
- RedisTemplate是一个泛型类,而StringRedisTemplate则不是
- StringRedisTemplate只能对k-v都是String类型的数据操作,RedisTemplate可以对任何类型的k-v数据操作
- 他们各自序列化的方式不同,但最终都是得到了一个字节数组,StringRedisTemplate使用的是StringRedisSerializer类;RedisTemplate使用的是JdkSerializationRedisSerializer类.反序列化的时候则是一个得到String,一个得到Object
好了,RedisTemplate就先说到这里