spring boot使用总结(五) 在spring boot中使用缓存注解

在系统中使用缓存,可以加快获取数据的速度,提高系统的效率,是提升系统性能的“银弹”。
在spring boot中使用缓存也比较简单,下面以redis作为系统的缓存来进行演示。

  1. 配置RedisCacheManager对象。RedisCacheManager用于告诉spring boot将使用redis作为系统的缓存。
@Bean
 RedisCacheManager redisCacheManager(RedisTemplate objRedisTemplate) {
     return new RedisCacheManager(objRedisTemplate);
 }
  1. 配置KeyGenerator。缓存以key-value的形式保存在redis中。可以实现
    org.springframework.cache.interceptor.KeyGenerator接口,来规定想要保存的key的格式。
    例如下面的例子用系统时间和传递的参数来生成key。
@Component
 public class CustomKeyGenerator implements KeyGenerator {
 private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     @Override
     public Object generate(Object target, Method method, Object... params) {
          key=sdf.format(new Date())+params[0];
          return key;
     }
 }
  1. CacheConfig用于表示关于缓存的配置,可以用来指定使用的缓存和key的生成规则。
@CacheConfig(cacheNames = "redisCacheManager", keyGenerator = "customKeyGenerator")
  1. 使用@Cacheable注解
    @Cacheable注解主要有两个作用 1)如果用户请求的数据已经被缓存,使用@Cacheable可以直接返回缓存数据 2)如果用户请求的数据没有被缓存,将执行Controller的方法,将查询结果保存在缓存中。例如在下面的例子中,以user.account作为查询缓存的key值。
    假设我们查询account=001的用户,如果在缓存中已经存在key=001的值,将会直接返回,不执行userSetService.queryUserInfo(user.getAccount())方法。如果在缓存不存在这个值,则会执行queryUserInfo的方法,并且将return的值保存在缓存中,下次再查询account=001时会直接返回。
  @Cacheable(key="#user.account")
  @PostMapping(value = "queryUser")
  public Object queryUser(@RequestBody User user) {
      return userSetService.queryUserInfo(user.getAccount());
  }
  1. 使用@CacheEvict注解
    @CacheEvict注解表示如果用户查询的数据已经保存在缓存中时则清空缓存,往往用于修改用户数据时使用。
    例如下面的例子,如果account=001的用户数据在缓存中已经存在了,就会清空key=001的缓存,如果没有则不做处理。
 @CacheEvict(key="#user.account")
 @PostMapping(value = "updateUser")
 public Object updateUser(@RequestBody User user) {
     userSetService.updateUserInfo(user);
     return "success";
 }

参考资料:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html

你可能感兴趣的:(spring boot使用总结(五) 在spring boot中使用缓存注解)