Spring实战(第四版) 第十三章 缓存数据

1、启用对缓存的支持

可以使用注解驱动缓存,大部分使用@Cacheable和@CacheEvict注解。另外需要向配置类添加@EnableCaching注解
@EnableCaching会创建一个切面并触发Spring缓存注解的切点。根据使用的注解以及缓存的状态,这个切面会从缓存中获取数据,将数据添加到缓存之中或者从缓存移除某个值。

@Configuration
@EnableCaching
public class CachingConfig {

  @Bean
  public EhCacheCacheManager cacheManager(CacheManager cm) {
    return new EhCacheCacheManager(cm);
  }

  @Bean
  public EhCacheManagerFactoryBean ehcache() {
    EhCacheManagerFactoryBean ehCacheFactoryBean = 
        new EhCacheManagerFactoryBean();
    ehCacheFactoryBean.setConfigLocation(
        new ClassPathResource("spittr/cache/ehcache.xml"));
    return ehCacheFactoryBean;
  }
  
}

Redis缓存

public class CachingConfig {

  @Bean
  public CacheCacheManager cacheManager(RedisTemplate redisTeplate) {
    return new RedisCacheManager(redisTemplate);
  }

  @Bean
  public JedisConnectionFactory redisConnectionFactory() {
    JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
    jedisConnectionFactory.afterPropertiesSet();
    return jedisConnectionFactory;
  }

  @Bean
  public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory redisCF) {
    RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();
    redisTemplate.setConnectionFactory(redisCF);
    redisTemplate.afterPropertiesSet();
    return redisTemplate;
  }
}

2、为方法添加注解以支持缓存

填充缓存

  • @Cache,Spring调用方法之前,首先在缓存中查找方法的返回值,如果这个值能够找到,就会返回,否则方法调用并将结果放入缓存。
  • @CachePut,始终往缓存中方,调用前不检查缓存

@Cacheable("spittleCache")
public Spittle findOne(long id) {
  try {
    return jdbcTemplate.queryForObject(SELECT_SPITTTLE_BY_ID, new SpittleRowMapper(), id);
  } catch (EmptyResultDataAccessException e) {
    return null;
  }

  • 可以自定义缓存key
@CachePut(value = "spittleCache", key = "#result.id")
Spittle save(Spittle spittle);
  • 可以根据条件设置缓存,比如下面这个如果包含NoCache文本内容就不会缓存
@Cacheable(value = "spittleCache", unless = "#result.message.contains('NoCache')")
Spittle findOne(long id)

移除缓存

@CacheEvict("spittleCache")
void remove(long spittleId);

posted on 2021-12-26 16:26  kaiker  阅读(10)  评论(0)    收藏  举报