pom.xml
<!-- 缓存依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency>
RedisConfig
类// 配置缓存管理器 @Bean public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) { RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofDays(7)) // 7天缓存失效 // 设置key的序列化方式 .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(keySerializer())) // 设置value的序列化方式 .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(valueSerializer())) // 不缓存null值 .disableCachingNullValues(); RedisCacheManager redisCacheManager = RedisCacheManager.builder(connectionFactory) .cacheDefaults(config) .transactionAware() .build(); return redisCacheManager; } // key键序列化方式 private RedisSerializer<String> keySerializer() { return new StringRedisSerializer(); } // value值序列化方式 private GenericJackson2JsonRedisSerializer valueSerializer(){ return new GenericJackson2JsonRedisSerializer(); // return new GenericFastJsonRedisSerializer(); } // 自定义key生成器 @Bean public KeyGenerator keyGenerator(){ return (o, method, params) ->{ StringBuilder sb = new StringBuilder(); sb.append(o.getClass().getName()); // 类目 sb.append(method.getName()); // 方法名 for(Object param: params){ sb.append(param.toString()); // 参数名 } return sb.toString(); }; }
- SpringBoot的
Application
启动类
加上@EnableCaching
@EnableCaching //启动注解缓存 public class XXXApplication { public static void main(String[] args) { SpringApplication.run(XXXApplication.class, args); System.out.println("项目启动成功"); } }
这样就可以在Service里面使用了,注意一定要使用AOP注入才生效,比如在同个Class里,调方法是不生效的。
@Cacheable(value = "onePerson",key = "'userId::' + #userId")
public Person selectOne(Long userId){
//查询数据库
Person person = PersonMapper.selectOneById(userId);
return person;
}
@CachePut(value = "onePerson",key = "'userId::' + #person.userId")
public Person updateOne(Person person){
PersonMapper.updateOne(person);
return person;
}
@CacheEvict(value = "onePerson",key = "'userId::' + #userId")
public int deleteOne(Long userId){
return PersonMapper.deleteOneById(userId);
}