Spring Boot 注解配置与EhCache使用

注解配置与EhCache使用

创建一个maven项目

这里写图片描述

pom文件引入

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>

这里写图片描述

新建ehcache.xml 文件

这里写图片描述

<?xml version="1.0" encoding="UTF-8"?>
<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:内存数量最大时是否清除。  

创建一个实体类

这里写图片描述

代码使用Cacheable ,创建UserMapper

这里写图片描述

这里写图片描述

创建IndexController

我们直接在IndexController调用findName方法
这里写图片描述

创建App类

这里写图片描述


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);
    }

}

测试

我们配置好数据库
这里写图片描述

看看我们springboot数据库的user表里面有什么数据:
这里写图片描述

然后我们启动程序:

我们来查询username=aaa的:
这里写图片描述

之后我们修改这条数据,改为bbb
这里写图片描述

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

这里写图片描述

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

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

这里写图片描述

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

ehcache 和 redis 的比较

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

清除缓存

这里写图片描述

然后我们再来测试一下:
访问:http://localhost:8080/getUserName?name=bbb
这里写图片描述

然后我们修改一下数据库,改为ccc
这里写图片描述

再次查询还是一样:
这里写图片描述

然后我们清除下缓存:
这里写图片描述

然后再次查询bbb
这里写图片描述

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值