pom依赖
引入redis的starter以及commons-pool2的依赖,commons-pool2是配置连接池需要使用的,不引入,只有连接池配置是不会创建连接池的
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- spring2.X集成redis所需common-pool2-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
redis配置文件
这里使用lettuce作为演示
server.port=8080
# reids配置
spring.redis.client-type=lettuce
spring.redis.host=192.168.61.133
spring.redis.port=6379
spring.redis.password=123456
spring.redis.ssl=false
#超时时间 单位ms
spring.redis.timeout=100000
spring.redis.database=0
# 使用默认lettuce作为连接池,只有引入commons-pool2依赖才会创建连接池,仅有连接池配置不会创建连接池!
# 最大连接数
spring.redis.lettuce.pool.max-active=10
# 连接池中最大空闲连接
spring.redis.lettuce.pool.max-idel=3
# 连接池中最小空闲连接
spring.redis.lettuce.pool.min-idel=2
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
spring.redis.lettuce.pool.max-wait=60s
代码示例
这里将redis默认的序列化方式JdkSerializationRedisSerializer修改为了Jackson2JsonRedisSerializer,之所以要更换序列化方式,是因为默认的序列化方式,在redis中存储的数据无法直观看到其内容,可读性差,并且占用存储空间大,key在redis中的实际名称也会发生改变,如下图所示,本来key的名称是name, get name却查不到,原因是redis中key的名称经过redsiTemplate序列化后变了:
但是更改了序列化方式后,存放的value只能是json格式,不能是纯字符串,如果是纯字符串,在取到数据后转换时会报错。
如果需要同时支持存储普通字符串,还需要同时创建StringRedisTemplate 的bean对象注入到容器中,这样就可以同时支持普通字符串和json形式的存储了。
最佳实践:
修改默认序列化方式不如直接使用stringRedisTemplate,把需要存的数据手动转为json字符串后再存入redis, 获取数据后将json串手动去转换 为所需的对象:
package com.example.lchtest.redis.tool;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework