(1)添加 spring-boot-starter-cache 依赖
org.springframework.boot spring-boot-starter-cache
(2)开启缓存功能
@Configuration @EnableCaching public class CacheConfig { }
(3)缓存数据
对于缓存的操作,主要有:@Cacheable、@CachePut、@CacheEvict。
@Cacheable
Spring 在执行 @Cacheable 标注的方法前先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,执行该方法并将方法返回值放进缓存。
参数: value缓存名、 key缓存键值、 condition满足缓存条件、unless否决缓存条件
@Cacheable(value = "user", key = "#id") public User findById(final Long id) { System.out.println("cache miss, invoke find by id, id:" + id); for (User user : users) { if (user.getId().equals(id)) { return user; } } return null; }
@CachePut
和 @Cacheable 类似,但会把方法的返回值放入缓存中, 主要用于数据新增和修改方法。
@CachePut(value = "user", key = "#user.id") public User save(User user) { users.add(user); return user; }
@CacheEvict
方法执行成功后会从缓存中移除相应数据。
参数: value缓存名、 key缓存键值、 condition满足缓存条件、 unless否决缓存条件、 allEntries是否移除所有数据(设置为true时会移除所有缓存)
@CacheEvict(value = "user", key = "#user.id") // 移除指定key的数据 public User delete(User user) { users.remove(user); return user; }
@CacheEvict(value = "user", allEntries = true) // 移除所有数据 public void deleteAll() { users.clear(); }
(4)集成EhCache
net.sf.ehcache ehcache
SpringBoot可以自动配置不需要什么特殊设置即可使用。
src/main/resources/ehcache.xml
src\main\resources/application.properties
引用
spring.cache.ehcache.config=classpath:ehcache.xml
如果想自定义设置一些个性化参数时,通过Java Config形式配置。
@Configuration @EnableCaching public class CacheConfig { @Bean public CacheManager cacheManager() { return new EhCacheCacheManager(ehCacheCacheManager().getObject()); } @Bean public EhCacheManagerFactoryBean ehCacheCacheManager() { EhCacheManagerFactoryBean cmfb = new EhCacheManagerFactoryBean(); cmfb.setConfigLocation(new ClassPathResource("ehcache.xml")); cmfb.setShared(true); return cmfb; } }
(5)组合CacheManager
从多个CacheManager中轮询得到相应的Cache。
@Configuration @EnableCaching public class CacheConfig { @Bean public CacheManager compositeCacheManager(RedisTemplate
*** 设置缓存无效化 spring.cache.type=none
*** 缓存的对象必须实现Serializable
*** 除GuavaCacheManager之外都支持Spring事务,即回滚时Cache的数据也会被移除