Springboot集成Ehcache

我的简单理解

Ehcache 我的简单理解

  • Ehcache 是进程内缓存,就是Ehcache的缓存占用的存储空间,和JAVA虚拟机是在一块儿的,也就是说随着缓存的增多,java虚拟机所消耗的内存也会变大。。这是与redis最明显的区别。。
  • 因为Ehcache 缓存和java虚拟机在一起,所以读写速度自然也是极快的。
  • Ehcach的工作机制就是,当一个请求来了之后,如果我们在查询的方法上添加了@Cacheable注解,则会先去缓存里面查找数据,如果缓存中有则直接返回,没有则执行方法去数据库查询。

1 添加依赖

        
            org.springframework.boot
            spring-boot-starter-cache
        
        
            net.sf.ehcache
            ehcache
            2.10.4
        

2 新建立一个Mycache.xml文件放在,类路径下。

xml 文件主要用来配置Ehcache 如下





    
    

    
    

    

    


里面可以添加若干个标签,,每个cache标签对一个cache进行配置。

配置类

@Configuration
@EnableCaching
public class MyEhcacheConfig {

    @Bean
    public EhCacheCacheManager ehCacheCacheManager(EhCacheManagerFactoryBean bean) {
        return new EhCacheCacheManager(bean.getObject());
    }

    /**
     * 据shared与否的设置,
     * Spring分别通过CacheManager.create()
     * 或new CacheManager()方式来创建一个ehcache基地.
     * 也说是说通过这个来设置cache的基地是这里的Spring独用,还是跟别的(如hibernate的Ehcache共享)
     *
     * @return
     */
    @Bean
    public EhCacheManagerFactoryBean ehCacheManagerFactoryBean() {
        EhCacheManagerFactoryBean cacheManagerFactoryBean = new EhCacheManagerFactoryBean();
        cacheManagerFactoryBean.setConfigLocation(new ClassPathResource("mycache.xml"));
        cacheManagerFactoryBean.setShared(true);
        return cacheManagerFactoryBean;
    }

}

通过以上配置类我们就产生了一个EhcacheManager 。
接下来我们至于要在需要添加缓存,和删除缓存的地方加注解就可以实现缓存的基本功能了。

通常注解我们加在Service层中,也可以加在Controller层
如下就可以实现在查询的时候添加缓存,在删除的时候删除缓存,,对应在更改的时候也应该删除缓存。

    @GetMapping("work/{id}")
    @Cacheable(value = "myCache", key = "#id")
    public WorkInfo getWorkInfo(@PathVariable Integer id) {
        return workInfoService.getById(id);
    }


    @GetMapping("work/delete/{id}")
    @CacheEvict(value = "myCache", key = "#id")
    public boolean deleteWorkInfo(@PathVariable Integer id) {
        return workInfoService.removeById(id);
    }

常用的几个注解的说明

@Cacheable() 参数如下

  • name 缓存的名字 对应xml文件的cache的name
  • key 键 可以缺省,默认值按照KeyGenerator的生成策略
  • condition 条件 看,条件满足则添加缓存

@CacheEvict()

  • name 缓存的名字 对应xml文件的cache的name
  • key 键 可以缺省,默认值按照KeyGenerator的生成策略
  • condition 条件 看,条件满足则添加缓存
  • allEntries 清除该缓存中的所有内容
  • beforeInvocation booble 在执行方法之前清除缓存

@CachePut()

  • 与@Cacheable相同的是,@CachePut 功能是将数据添加入缓存
  • 与@Cacheable不同的是,@CachePut 不会先去判断缓存里面是否有符合的数据,而是每次都去执行方法,并将方法的返回值放进cache中。

你可能感兴趣的:(cache)