- 引包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.代码部分
//redsi相关配置省略
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
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.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.serializer.*;
import java.time.Duration;
import java.util.HashMap;
import java.util.Map;
//配置相关类设置缓存支持
@Configuration
@EnableCaching // 开启缓存支持
public class RedisConfig extends CachingConfigurerSupport {
/**
* 缓存配置管理器
*
* @param factory
* @return
*/
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
//5分钟失效
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(5));
RedisCacheConfiguration redisCacheConfiguration = config.disableCachingNullValues().serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
Map<String, RedisCacheConfiguration> configMap = new HashMap<>();
RedisCacheConfiguration fiveMinConfig = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(5)).disableCachingNullValues();
//设置xxxkey的失效时间
configMap.put("xxxkey",fiveMinConfig);
RedisCacheManager cacheManager = RedisCacheManager.builder(RedisCacheWriter.lockingRedisCacheWriter(factory)).cacheDefaults(redisCacheConfiguration)
.withInitialCacheConfigurations(configMap)
.transactionAware().build();
return cacheManager;
}
}
//代码中使用缓存,最好是注解在service层
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
public class XxxxServiceImpl implements XxxxService {
/**
* 指定前缀value xxxkey(配置类中设置了该前缀key的失效时间,项目重启key会自动清除),后缀则为:
* key部分,按照#开头拼接传递的参数,最终redis
*key为xxxkey::xx1:xx2,之后传递相同的参数则取缓存,直到失效或者重启,在进行具体实现查询
* @return
*/
@Cacheable(value = "xxxkey", key = "#xx1+':'+#xx2")
@Override
public XXXDto getExportInfoNullLoadTime(List<String> xx1, List<String> xx2) {
//具体实现
return XXXDto;
}
}