ehcache

简述

EhCache 是一个纯Java的分布式的进程内缓存框架,具有快速、精干等特点,主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点,是Hibernate中默认的CacheProvider;

  • 在 Spring Boot中,通过@EnableCaching注解自动化配置合适的缓存管理器

  • 关于 Spring Boot 的缓存机制:
    高速缓存抽象不提供实际存储,并且依赖于由org.springframework.cache.Cache和org.springframework.cache.CacheManager接口实现的抽象。 Spring Boot根据实现自动配置合适的CacheManager,只要缓存支持通过@EnableCaching注释启用即可。

  • 特点
    (1)快速简单,具有多种缓存策略
    (2)缓存数据有两级为内存和磁盘,缓存数据会在虚拟机重启的过程中写入磁盘
    (3)可以通过RMI、可插入API等方式进行分布式缓存
    (4)具有缓存和缓存管理器的侦听接口
    (5)支持多缓存管理器实例,以及一个实例的多个缓存区域。并提供Hibernate的缓存实现
    (6)Ehcache有缓存共享方案,不过是通过RMI或者Jgroup多播方式进行广播缓存通知更新,缓存共享复杂,维护不方便;简单的共享可以,但是涉及到缓存恢复,大数据缓存,则不合适

环境搭建

  • 依赖
      
      
          org.springframework.boot
          spring-boot-starter-cache
      
      
      
          net.sf.ehcache
          ehcache
      
  • 配置文件(eccache.xml)


   //默认缓存策略,当ehcache找不到定义的缓存时,则使用这个缓存策略。只能定义一个。
    

    
    


diskStore:为缓存路径,ehcache分为内存和磁盘两级,此属性定义磁盘的缓存位置。
diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
clearOnFlush:内存数量最大时是否清除。
memoryStoreEvictionPolicy:可选策略有:LRU(最近最少使用,默认策略)、FIFO(先进先出)、LFU(最少访问次数)。 

项目使用

  • springboot支持的注解
    1:@Cacheable : Spring在每次执行前都会检查Cache中是否存在相同key的缓存元素,如果存在就不再执行该方法,而是直接从缓存中获取结果进行返回,否则才会执行并将返回结果存入指定的缓存中。
    2:@CacheEvict : 清除缓存。
    3: @CachePut : @CachePut也可以声明一个方法支持缓存功能。使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。
  • 这三个方法中都有两个主要的属性:value 指的是 ehcache.xml 中的缓存策略空间(name属性);key 指的是缓存的标识,同时可以用 # 来引用参数。

与其他缓存比较

  • ehcache和redis有什么区别
    前者操作简单易使用,存取速度快,效率更高但是不适合大型的分布式集群部署。而后者更适合用于大数据缓存,数据恢复等。

结合springboot

1:pom文件



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.3.RELEASE
         
    
    com.ramostear
    cache
    0.0.1-SNAPSHOT
    cache
    Demo project for Spring Boot

    
        1.8
    

    
        
        
            org.springframework.boot
            spring-boot-starter-cache
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            org.ehcache
            ehcache
        
         
        
            javax.cache
            cache-api
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            org.projectlombok
            lombok
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


2:配置

spring.cache.jcache.config=classpath:ehcache.xml

然后使用@EnableCaching注解开启Spring Boot应用程序缓存功能(启动类上)。
3:书写ehcache.xml,同上面介绍。
4:还需要定义个缓存事件监听器,用于记录系统操作缓存数据的情况,最快的方法是实现CacheEventListener接口:

@Slf4j
public class PersonCacheEventLogger implements CacheEventListener<Object,Object>{



    @Override
    public void onEvent(CacheEvent cacheEvent) {
        log.info("person caching event {} {} {} {}",
                cacheEvent.getType(),
                cacheEvent.getKey(),
                cacheEvent.getOldValue(),
                cacheEvent.getNewValue());
    }
}

5:使用@Cacheable注解

@Service
public class PersonService {

    @Cacheable(cacheNames = "person",key = "#id")
    public Person getPerson(Long id){
        Person person = new Person(id,"ramostear","[email protected]");
        return person;
    }
}

你可能感兴趣的:(缓存技术)