package com.jt.blog.config;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.lang.reflect.Method;
import java.time.Duration;
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
// 用目标的包名target,方法名method,类名params自动生成一个自定义的key
@Override
@Bean
public KeyGenerator keyGenerator(){
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder stringBuilder = new StringBuilder();
//加入类全名
stringBuilder.append(target.getClass().getName());
//分隔符
stringBuilder.append(":");
//方法名
stringBuilder.append(method.getName());
//分隔符
stringBuilder.append(":");
//对象名,将对象名以“+”进行拼接
for(Object param:params){
stringBuilder.append(param);
stringBuilder.append("+");
}
return stringBuilder.toString();
}
};
}
//设置CacheManager缓存规则
@Bean
public CacheManager cacheManager(RedisConnectionFactory connectionFactory){
RedisCacheConfiguration configuration =
RedisCacheConfiguration.defaultCacheConfig();
configuration.entryTtl(Duration.ofSeconds(60))
//key的序列化,使用StringRedisSerializer序列化
.serializeKeysWith(
RedisSerializationContext.SerializationPair.
fromSerializer(new StringRedisSerializer()) )
//值的序列化,使用Jackson2JsonRedisSerializer序列化
.serializevaluesWith(
RedisSerializationContext.SerializationPair.fromSerializer(
new Jackson2JsonRedisSerializer