package com.lunhan.xxx.common.cache;
|
|
import com.lunhan.xxx.common.ConstantFactory;
|
import org.springframework.cache.CacheManager;
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Primary;
|
import org.springframework.data.redis.cache.RedisCacheConfiguration;
|
import org.springframework.data.redis.cache.RedisCacheManager;
|
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
import org.springframework.data.redis.serializer.*;
|
|
import java.time.Duration;
|
|
@Configuration
|
public class CacheManagerConfig {
|
@Bean
|
@Primary
|
public CacheManager json4RedisCacheManager(RedisConnectionFactory redisConnectionFactory) {
|
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
|
//设置24小时过期
|
.entryTtl(Duration.ofMillis(ConstantFactory.TIME_LEN_24H))
|
//设置key的序列化方式
|
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new RedisKeySerializer()))
|
//设置值的序列化方式
|
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
|
|
|
RedisCacheManager.RedisCacheManagerBuilder builder =
|
RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(redisConnectionFactory);
|
|
//返回构造的cacheManager
|
return builder.transactionAware().cacheDefaults(config).build();
|
}
|
|
@Bean
|
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
|
StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(redisConnectionFactory);
|
stringRedisTemplate.setKeySerializer(new RedisKeySerializer());
|
return stringRedisTemplate;
|
}
|
|
@Bean
|
public RedisTemplate<String, Object> objectRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
|
RedisSerializer<String> serializer = new StringRedisSerializer();
|
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
|
RedisTemplate<String, Object> template = new RedisTemplate<>();
|
template.setConnectionFactory(redisConnectionFactory);
|
template.setKeySerializer(new RedisKeySerializer());
|
template.setValueSerializer(jackson2JsonRedisSerializer);
|
template.setHashKeySerializer(serializer);
|
template.setHashValueSerializer(jackson2JsonRedisSerializer);
|
template.afterPropertiesSet();
|
|
return template;
|
}
|
}
|