Spring+Redis 缓存
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
其余引入Springboot 依赖项
配置类
@SuppressWarnings("all")
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public KeyGenerator simpleKeyGenerator() {
return (o, method, objects) -> {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(o.getClass().getSimpleName());
stringBuilder.append(".");
stringBuilder.append(method.getName());
stringBuilder.append("[");
for (Object obj : objects) {
stringBuilder.append(obj.toString());
}
stringBuilder.append("]");
return stringBuilder.toString();
};
}
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
return new RedisCacheManager(
RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory),
this.getRedisCacheConfigurationWithTtl(5), // 默认策略,未配置的 key 会使用这个
this.getRedisCacheConfigurationMap() // 指定 key 策略
);
}
/**
* @how to use eg:
* @Cacheable(value = "USER1", keyGenerator = "simpleKeyGenerator") //10min
* @Cacheable(value = "USER10", keyGenerator = "simpleKeyGenerator") //10min
* @Cacheable(value = "USER30", keyGenerator = "simpleKeyGenerator") // 30min
* @Cacheable(value = "USER60", keyGenerator = "simpleKeyGenerator") // 60min,未指定的key,使用默认策略
****/
private Map<String, RedisCacheConfiguration> getRedisCacheConfigurationMap() {
Map<String, RedisCacheConfiguration> redisCacheConfigurationMap = new HashMap<>();
redisCacheConfigurationMap.put("USER1", this.getRedisCacheConfigurationWithTtl(1));
redisCacheConfigurationMap.put("USER10", this.getRedisCacheConfigurationWithTtl(10));
redisCacheConfigurationMap.put("USER30", this.getRedisCacheConfigurationWithTtl(30));
redisCacheConfigurationMap.put("USER60", this.getRedisCacheConfigurationWithTtl(60));
return redisCacheConfigurationMap;
}
/**
* key String ,value JSON
*
* @param Minute
* @return
*/
private RedisCacheConfiguration getRedisCacheConfigurationWithTtl(Integer minute) {
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = getJacksonSerializer();
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(minute));
RedisSerializationContext.SerializationPair<Object> serializationPair = RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer);
RedisSerializationContext.SerializationPair<String> stringSerializationPair = RedisSerializationContext.SerializationPair
.fromSerializer(getStringSerializer());
redisCacheConfiguration.serializeValuesWith(serializationPair).serializeKeysWith(stringSerializationPair);
return redisCacheConfiguration;
}
@Resource
private RedisTemplate<String, List<String>> redisTemplate;
public RedisTemplate<String, List<String>> getRedisTemplate() {
this.redisTemplate.setValueSerializer(getJacksonSerializer());
this.redisTemplate.setKeySerializer(getStringSerializer());
return this.redisTemplate;
}
public ObjectMapper getObjectMapper() {
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
return om;
}
public Jackson2JsonRedisSerializer<Object> getJacksonSerializer() {
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
jackson2JsonRedisSerializer.setObjectMapper(getObjectMapper());
return jackson2JsonRedisSerializer;
}
public StringRedisSerializer getStringSerializer() {
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
return stringRedisSerializer;
}
}
启动类加上注解@EnableCaching,用法和这几个注解的方式一样 @Cacheable @CachePut @CacheEvict

浙公网安备 33010602011771号