依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置文件
spring:
redis:
# 地址
host: 8.142.45.54
# 端口,默认为6379
port: 6379
# 数据库索引
database: 3
# 密码
# password: venuebook123
# 连接超时时间
timeout: 10s
# 是否开启ssl
ssl: false
lettuce:
pool:
# 最大可用连接数(默认为8,负数表示无限)
max-active: 8
# 最大空闲连接数(默认为8,负数表示无限)
max-idle: 8
# 最小空闲连接数(默认为0,该值只有为正数才有用)
min-idle: 0
# 从连接池中获取连接最大等待时间(默认为-1,单位为毫秒,负数表示无限)
max-wait: -1
序列化组件
@Configuration
public class RedisConfig {
//基于注解的序列化设置
@Bean
public RedisCacheManager redisCacheManager(RedisConnectionFactory redisConnectionFactory) {
//序列化方式,分别为String格式和Json格式
RedisSerializer<String> stringRedisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//json与对象转换的核心类
ObjectMapper om = new ObjectMapper();
//解决查询缓存转换异常问题
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
//设置转换核心类
jackson2JsonRedisSerializer.setObjectMapper(om);
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
// 指定key缓存序列化方式为String
config=config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(stringRedisSerializer));
// 指定value缓存序列化方式为json
config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer));
// 设置配置文件中的各项配置,如过期时间,选择性配置
config = config.entryTtl(Duration.ofDays(1));
config = config.disableCachingNullValues();
config = config.disableKeyPrefix();
RedisCacheManager redisCacheManager=RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(config).build();
return redisCacheManager;
}
//基于api的序列化设置
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
//序列化方式,分别为String格式和Json格式
RedisSerializer<String> stringRedisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//json与对象转换的核心类
ObjectMapper om = new ObjectMapper();
//解决查询缓存转换异常问题
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
//设置转换核心类
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setConnectionFactory(factory);
//设置默认序列化方式,下面单独设置会覆盖默认
template.setDefaultSerializer(jackson2JsonRedisSerializer);
//key序列化方式为string格式
template.setKeySerializer(stringRedisSerializer);
//value序列化为Json格式
template.setValueSerializer(jackson2JsonRedisSerializer);
//value hashmap序列化为Json格式
template.setHashKeySerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
return template;
}
}
ObjectMapper
用于JSON与对象间转换
Java使用ObjectMapper的简单示例 - Fire♪一度 - 博客园 (cnblogs.com)
四种序列化方式
Redis - RedisTemplate及4种序列化方式深入解读 - 云+社区 - 腾讯云 (tencent.com)