可以采用单缓存 或者 多缓存
ehcache.xml
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<cache name="spittleCache" maxBytesLocalHeap="50m" timeToLiveSeconds="100"></cache>
</ehcache>
单独开启ehcache 或 redis
@Configuration
@EnableCaching
public class CachingCinfig {
// @Bean
// public CacheManager cacheManager(){
// return new ConcurrentMapCacheManager();
// }
/**
* EhCache 缓存管理器
* @author dong.tl
* @date 2017年4月21日 下午2:05:20
* @param cm
* @return
*/
// @Bean
// public EhCacheCacheManager cacheManager(CacheManager cm) {
// return new EhCacheCacheManager(cm);
// }
@Bean
public EhCacheManagerFactoryBean ehcache() {
EhCacheManagerFactoryBean ehCacheManagerFactoryBean = new EhCacheManagerFactoryBean();
ehCacheManagerFactoryBean.setConfigLocation(new ClassPathResource("eache/ehcache.xml"));
return ehCacheManagerFactoryBean;
}
/**
* 配置redis缓存管理器
* @author dong.tl
* @date 2017年4月21日 下午2:04:23
* @param redisTemplate
* @return
*/
// @Bean
// public org.springframework.cache.CacheManager cacheManager(RedisTemplate<String, String> redisTemplate){
// return new RedisCacheManager(redisTemplate);
// }
/**
* 多缓存管理器
* @author dong.tl
* @date 2017年4月21日 下午2:15:57
* @param ecm
* @param redisTemplate 需要先实习RedisTemplate Bean
* @return
*/
@Bean
public org.springframework.cache.CacheManager cacheManager(CacheManager ecm,RedisTemplate<String, String> redisTemplate){
CompositeCacheManager cacheManager = new CompositeCacheManager();
List<org.springframework.cache.CacheManager> managers = new ArrayList<>();
managers.add(new EhCacheCacheManager(ecm));
managers.add(new RedisCacheManager(redisTemplate));
cacheManager.setCacheManagers(managers);
return cacheManager;
}
}
几个注意常用的缓存注解
@Cacheable 首先在缓存中查找,如果没有则执行方法,将方法的返回值存入缓存中
@CachePut 方法始终会被执行 人后将返回值放入缓存中
@CachEvict 删除缓存
@PersistenceContext
private EntityManager entityManager;
@Override
@CachePut(value="spottleCache",key="#result.id")
public void add(Spittr spittr) {
// entityManager.createNativeQuery ("insert into spittr values(" + spittr.getId() + ",'" + spittr.getName() + "')")
// .executeUpdate();
entityManager.persist(spittr);
}
@Override
@Cacheable("spittleCache")
public Spittr findMyOne(int id) {
System.out.println("查找了");
return entityManager.find(Spittr.class, id);
}