1.接口每次查询耗费时间很长,考虑该接口数据是不经常变数据,故新增缓存处理。
1.1maven依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>1.4.7.RELEASE</version> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
1.2 配置文件yml添加redis配置文件
redis: database: 0 host: xxxxx port: 8101 password: xxxx timeout: 20000
1.3 把redis数据源加载到spring容器中

1 import com.fasterxml.jackson.annotation.JsonAutoDetect; 2 import com.fasterxml.jackson.annotation.JsonInclude; 3 import com.fasterxml.jackson.annotation.JsonTypeInfo; 4 import com.fasterxml.jackson.annotation.PropertyAccessor; 5 import com.fasterxml.jackson.databind.DeserializationFeature; 6 import com.fasterxml.jackson.databind.MapperFeature; 7 import com.fasterxml.jackson.databind.ObjectMapper; 8 import com.fasterxml.jackson.databind.SerializationFeature; 9 import org.springframework.cache.annotation.EnableCaching; 10 import org.springframework.context.annotation.Configuration; 11 import org.springframework.cache.CacheManager; 12 import org.springframework.context.annotation.Bean; 13 import org.springframework.data.redis.cache.RedisCacheConfiguration; 14 import org.springframework.data.redis.cache.RedisCacheManager; 15 import org.springframework.data.redis.cache.RedisCacheWriter; 16 import org.springframework.data.redis.connection.RedisConnectionFactory; 17 import org.springframework.data.redis.core.RedisTemplate; 18 import org.springframework.data.redis.core.StringRedisTemplate; 19 import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; 20 import org.springframework.data.redis.serializer.RedisSerializationContext; 21 22 23 @Configuration 24 public class RedisConfig { 25 26 @Bean 27 public RedisCacheManager redisCacheManager(RedisConnectionFactory connectionFactory){ 28 //初始化一个RedisCacheWriter输出流 29 RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory); 30 //采用Jackson2JsonRedisSerializer序列化机制 31 32 // Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<Object>(Object.class); 33 34 //创建一个RedisSerializationContext.SerializationPair给定的适配器pair 35 RedisSerializationContext.SerializationPair<Object> pair = RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer()); 36 //创建CacheConfig 37 RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(pair); 38 39 return new RedisCacheManager(redisCacheWriter, defaultCacheConfig); 40 } 41 42 43 44 45 @Bean 46 public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { 47 RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); 48 redisTemplate.setConnectionFactory(factory); 49 50 Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class); 51 ObjectMapper om = new ObjectMapper(); 52 om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); 53 jacksonSeial.setObjectMapper(om); 54 55 //设置默认缓存序列器为json序列化器 56 redisTemplate.setDefaultSerializer(jacksonSeial); 57 return redisTemplate; 58 } 59 @Bean 60 public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory) { 61 StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(); 62 stringRedisTemplate.setConnectionFactory(factory); 63 return stringRedisTemplate; 64 } 65 66 private Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer() { 67 Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = 68 new Jackson2JsonRedisSerializer<>(Object.class); 69 ObjectMapper objectMapper = new ObjectMapper(); 70 objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); 71 objectMapper.configure(MapperFeature.USE_ANNOTATIONS, false); 72 objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 73 objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); 74 // 此项必须配置,否则会报java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to XXX 75 objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); 76 objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); 77 jackson2JsonRedisSerializer.setObjectMapper(objectMapper); 78 return jackson2JsonRedisSerializer; 79 } 80 }
1.4 实现
@Cacheable(cacheNames = "xxxx",key = "#name")
public Result queryEnterpriseIcInfo(String id, String name){
//查询数据库操作,cacheable先去缓存查找,如果没有则查询数据库,查询结果会存入缓存。下次查询会自动从缓存加载。
}