配置:
@Bean
public LettuceConnectionFactory lettuceConnectionFactory() {
LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
.commandTimeout(Duration.ofSeconds(2))
.shutdownTimeout(Duration.ZERO)
.build();
RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(host, port);
configuration.setPassword(RedisPassword.of(password));
configuration.setDatabase(database);
return new LettuceConnectionFactory(configuration, clientConfig);
}
GenericFastJsonRedisSerializer redisSerializer = new GenericFastJsonRedisSerializer();
@Bean
public RedisTemplate<String, Serializable> redisTemplate() {
RedisTemplate<String, Serializable> template = new RedisTemplate<>();
template.setKeySerializer(new StringRedisSerializer());
template.setConnectionFactory(lettuceConnectionFactory());
template.setHashValueSerializer(redisSerializer);
return template;
}
@Bean
public CacheManager cacheManager() {
Duration duration = Duration.of(TIME_OUT, ChronoUnit.SECONDS);
RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(lettuceConnectionFactory());
RedisSerializationContext.SerializationPair<Object> pair = RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer);
RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig().entryTtl(duration).serializeValuesWith(pair);
RedisCacheManager cacheManager = new RedisCacheManager(redisCacheWriter, defaultCacheConfig);
return cacheManager;
}
@Bean("keyGenerator")
public KeyGenerator keyGenerator() {
return (target, method, params) -> {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}
return sb.toString();
};
}
@JsonInclude(Include.NON_NULL) public class BaseResult implements Serializable { private static final long serialVersionUID = -7642090011121424793L; private static final String SUCCESS_CODE = "1000"; private static final String SUCCESS_MSG = "success"; private String msg; private String code; private T data; }
缓存
@Cacheable(value = "findTagsList")
@Override
public BaseResult<List<String>> findTagsList(Long systemId, Long componentId) {
}
redis 内有存有如下数据 {"@type":"com.aimsphm.common.BaseResult","code":"1000","data":["按手动控制按钮","不停机","不转动","传动轴振动大","第一推进器"....],"msg":"success"}
获取redis数据的时候发现 DefaultJSONParser parser 是空的 导致每次反序列化出来的数据都是空的
基于spring boot 2.1.0.RELEASE fastjson 版本 1.2.51