Spring Boot 注解配置与EhCache使用

注解配置与EhCache使用

创建一个maven项目

Spring Boot 注解配置与EhCache使用_第1张图片

pom文件引入

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-cacheartifactId>
    dependency>

Spring Boot 注解配置与EhCache使用_第2张图片

新建ehcache.xml 文件

Spring Boot 注解配置与EhCache使用_第3张图片


<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
    updateCheck="false">
    <diskStore path="java.io.tmpdir/Tmp_EhCache" />

    
    <defaultCache maxElementsInMemory="5000" eternal="false"
        timeToIdleSeconds="120" timeToLiveSeconds="120"
        memoryStoreEvictionPolicy="LRU" overflowToDisk="false" />

    <cache name="baseCache" maxElementsInMemory="10000"
        maxElementsOnDisk="100000" />

ehcache>
配置信息介绍
           name:缓存名称。  
           maxElementsInMemory:缓存最大个数。  
           eternal:对象是否永久有效,一但设置了,timeout将不起作用。  
           timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。  
           timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。  
       overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。  
           diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。  
           maxElementsOnDisk:硬盘最大缓存个数。  
       diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.  
           diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。  
       memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。  
           clearOnFlush:内存数量最大时是否清除。  

创建一个实体类

Spring Boot 注解配置与EhCache使用_第4张图片

代码使用Cacheable ,创建UserMapper

Spring Boot 注解配置与EhCache使用_第5张图片

Spring Boot 注解配置与EhCache使用_第6张图片

创建IndexController

我们直接在IndexController调用findName方法
Spring Boot 注解配置与EhCache使用_第7张图片

创建App类

Spring Boot 注解配置与EhCache使用_第8张图片


package com.cc.springboot.app;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;

@ComponentScan(basePackages = { "com.cc.springboot.controller"})
@MapperScan(basePackages = "com.cc.springboot.mapper")
@EnableCaching//开启缓存注解
@EnableAutoConfiguration
public class App {

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

}

测试

我们配置好数据库
Spring Boot 注解配置与EhCache使用_第9张图片

看看我们springboot数据库的user表里面有什么数据:
Spring Boot 注解配置与EhCache使用_第10张图片

然后我们启动程序:

我们来查询username=aaa的:
Spring Boot 注解配置与EhCache使用_第11张图片

之后我们修改这条数据,改为bbb
Spring Boot 注解配置与EhCache使用_第12张图片

这个时候我们再次访问http://localhost:8080/getUserName?name=aaa

Spring Boot 注解配置与EhCache使用_第13张图片

访问的结果还是之前的结果,说明缓存成功了。

重启程序之后,再次访问:http://localhost:8080/getUserName?name=aaa

Spring Boot 注解配置与EhCache使用_第14张图片

说明它是缓存在jvm里面,是jvm缓存。还有一种叫内存缓存,比如:redis。

ehcache 和 redis 的比较

ehcache直接在jvm虚拟机中缓存,速度快,效率高;但是缓存共享麻烦,集群分布式应用不方便。redis是通过socket访问到缓存服务,效率比ecache低,比数据库要快很多,处理集群和分布式缓存方便,有成熟的方案。如果是单个应用或者对缓存访问要求很高的应用,用ehcache。如果是大型系统,存在缓存共享、分布式部署、缓存内容很大的,建议用redis。补充下:ehcache也有缓存共享方案,不过是通过RMI或者Jgroup多播方式进行广播缓存通知更新,缓存共享复杂,维护不方便;简单的共享可以,但是涉及到缓存恢复,大数据缓存,则不合适。

清除缓存

Spring Boot 注解配置与EhCache使用_第15张图片

然后我们再来测试一下:
访问:http://localhost:8080/getUserName?name=bbb
Spring Boot 注解配置与EhCache使用_第16张图片

然后我们修改一下数据库,改为ccc
Spring Boot 注解配置与EhCache使用_第17张图片

再次查询还是一样:
Spring Boot 注解配置与EhCache使用_第18张图片

然后我们清除下缓存:
Spring Boot 注解配置与EhCache使用_第19张图片

然后再次查询bbb
Spring Boot 注解配置与EhCache使用_第20张图片

可以说明缓存已经清除了。

你可能感兴趣的:(Spring,Boot,spring,boot,EhCache,缓存)