一,导入依赖
<dependency>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-starter-data-redis
</artifactId>
</dependency>
二,配置类
redis 的序列化方式默认采用字符串的序列化方式,但是这样在序列化一个对象的时候会产生乱码。所以需要定义自己的序列化器。
FastJson2JsonRedisSerializer
public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T> {
public static final Charset DEFAULT_CHARSET
= Charset
.forName("UTF-8");
private Class
<T> clazz
;
public FastJson2JsonRedisSerializer(Class
<T> clazz
) {
super();
this.clazz
= clazz
;
}
@Override
public byte[] serialize(T t
) throws SerializationException
{
if (t
== null
) {
return new byte[0];
}
return JSON
.toJSONString(t
, SerializerFeature
.WriteClassName
).getBytes(DEFAULT_CHARSET
);
}
@Override
public T
deserialize(byte[] bytes
) throws SerializationException
{
if (bytes
== null
|| bytes
.length
<= 0) {
return null
;
}
String str
= new String(bytes
, DEFAULT_CHARSET
);
return (T
) JSON
.parseObject(str
, clazz
);
}
}
配置类
@Configuration
@EnableCaching
public class RedisConfig {
@Bean
public CacheManager
cacheManager(RedisConnectionFactory factory
) {
CacheKeyPrefix cacheKeyPrefix
= new CacheKeyPrefix() {
@Override
public String
compute(String s
) {
return s
+":";
}
};
RedisSerializer
<String> redisSerializer
= new StringRedisSerializer();
RedisCacheConfiguration config
= RedisCacheConfiguration
.defaultCacheConfig();
RedisCacheConfiguration redisCacheConfiguration
= config
.serializeKeysWith(RedisSerializationContext
.SerializationPair
.fromSerializer(redisSerializer
))
.serializeValuesWith(RedisSerializationContext
.SerializationPair
.fromSerializer(new FastJsonRedisSerializer<>(Object
.class)))
.computePrefixWith(cacheKeyPrefix
);
RedisCacheManager cacheManager
= RedisCacheManager
.builder(factory
)
.cacheDefaults(redisCacheConfiguration
)
.build();
return cacheManager
;
}
@Bean
public RedisSerializer
fastJson2JsonRedisSerializer() {
return new FastJson2JsonRedisSerializer<Object>(Object
.class);
}
@Bean
public RedisTemplate
<String, Object> redisTemplate(RedisConnectionFactory factory
, RedisSerializer fastJson2JsonRedisSerializer
) {
RedisTemplate template
= new RedisTemplate();
template
.setConnectionFactory(factory
);
template
.setKeySerializer(new StringRedisSerializer());
template
.setHashKeySerializer(new StringRedisSerializer());
template
.setValueSerializer(fastJson2JsonRedisSerializer
);
template
.setHashValueSerializer(fastJson2JsonRedisSerializer
);
template
.afterPropertiesSet();
return template
;
}
}