首页 > 其他分享 >Mybatis16 - 第三方缓存 EHCaChe

Mybatis16 - 第三方缓存 EHCaChe

时间:2023-02-14 19:33:12浏览次数:57  
标签:EHCaChe EHCache 缓存 配置文件 element Mybatis Mybatis16 logback

1. EHCache简介

官网地址:https://www.ehcache.org/

img

Ehcache is an open source, standards-based cache that boosts performance, offloads your database, and simplifies scalability. It's the most widely-used Java-based cache because it's robust, proven, full-featured, and integrates with other popular libraries and frameworks. Ehcache scales from in-process caching, all the way to mixed in-process/out-of-process deployments with terabyte-sized caches.

2. 整合操作

①Mybatis环境

在Mybatis环境下整合EHCache,前提当然是要先准备好Mybatis的环境。

②添加依赖

[1]依赖信息

<!-- Mybatis EHCache整合包 -->
<dependency>
    <groupId>org.mybatis.caches</groupId>
    <artifactId>mybatis-ehcache</artifactId>
    <version>1.2.1</version>
</dependency>

[2]依赖传递情况

[3]各主要jar包作用

jar包名称 作用
mybatis-ehcache Mybatis和EHCache的整合包
ehcache EHCache核心包
slf4j-api SLF4J日志门面包
logback-classic 支持SLF4J门面接口的一个具体实现

③整合EHCache

[1]创建EHCache配置文件

ehcache.xml

引入第三方框架或工具时,配置文件的文件名可以自定义吗?
  • 可以自定义:文件名是由我告诉其他环境
  • 不能自定义:文件名是框架内置的、约定好的,就不能自定义,以避免框架无法加载这个文件

[2]文件内容

<?xml version="1.0" encoding="utf-8" ?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
    <!-- 磁盘保存路径 -->
    <diskStore path="D:\zzz\ehcache"/>
    
    <defaultCache
            maxElementsInMemory="1000"
            maxElementsOnDisk="10000000"
            eternal="false"
            overflowToDisk="true"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU">
    </defaultCache>
</ehcache>

[3]指定缓存管理器的具体类型

还是到查询操作所在的Mapper配置文件中,找到之前设置的cache标签:

<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>

④加入logback日志

存在SLF4J时,作为简易日志的log4j将失效,此时我们需要借助SLF4J的具体实现logback来打印日志。 创建logback的配置文件logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
	<!-- 指定日志输出的位置 -->
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<!-- 日志输出的格式 -->
			<!-- 按照顺序分别是: 时间、日志级别、线程名称、打印日志的类、日志主体内容、换行
			-->
			<pattern>[%d{HH:mm:ss.SSS}] [%-5level] [%thread] [%logger][%msg]%n</pattern>
		</encoder>
	</appender>
	<!-- 设置全局日志级别。日志级别按顺序分别是: DEBUG、INFO、WARN、ERROR -->
	<!-- 指定任何一个日志级别都只打印当前级别和后面级别的日志。 -->
	<root level="DEBUG">
		<!-- 指定打印日志的appender,这里通过“STDOUT”引用了前面配置的appender -->
		<appender-ref ref="STDOUT" />
	</root>
	<!-- 根据特殊需求指定局部日志级别 -->
	<logger name="com.zzz.mybatis.mapper" level="DEBUG"/>
</configuration>

⑤junit测试

正常按照二级缓存的方式测试即可。因为整合EHCache后,其实就是使用EHCache代替了Mybatis自带的二级缓存。

3、EHCache配置文件说明

当借助CacheManager.add("缓存名称")创建Cache时,EhCache便会采用指定的的管理策略。

defaultCache标签各属性说明:

属性名 是否必须 作用
maxElementsInMemory 在内存中缓存的element的最大数目
maxElementsOnDisk 在磁盘上缓存的element的最大数目,若是0表示无穷大
eternal 设定缓存的elements是否永远不过期。
如果为true,则缓存的数据始终有效,
如果为false那么还要根据timeToIdleSeconds、timeToLiveSeconds判断
overflowToDisk 设定当内存缓存溢出的时候是否将过期的element缓存到磁盘上
timeToIdleSeconds 当缓存在EhCache中的数据前后两次访问的时间超过timeToIdleSeconds的属性取值时,
这些数据便会删除,默认值是0,也就是可闲置时间无穷大
timeToLiveSeconds 缓存element的有效生命期,默认是0.,也就是element存活时间无穷大
diskSpoolBufferSizeMB DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区
diskPersistent 在VM重启的时候是否启用磁盘保存EhCache中的数据,默认是false。
diskExpiryThreadIntervalSeconds 磁盘缓存的清理线程运行间隔,默认是120秒。每个120s,
相应的线程会进行一次EhCache中数据的清理工作
memoryStoreEvictionPolicy 当内存缓存达到最大,有新的element加入的时候, 移除缓存中element的策略。
默认是LRU(最近最少使用),可选的有LFU(最不常使用)和FIFO(先进先出)

LFU:Least Frequently Used,最不经常使用。在执行缓存回收时,删除访问数量最低的数据。Bug是访问量先高后低的数据无法删除。

LRU:Least Recently Used,

  • 最近最少使用。在执行缓存回收时,删除近期访问数量最低的数据。典型案例:HashMap
  • 最近最久使用。在执行缓存回收时,删除近期闲置时间最长的数据。典型案例:Redis

FIFO:First In First Out,先进先出。使用队列维护缓存数据,先存入的数据会被先删除。

标签:EHCaChe,EHCache,缓存,配置文件,element,Mybatis,Mybatis16,logback
From: https://www.cnblogs.com/Ashen-/p/17120674.html

相关文章

  • Vue keep-alive缓存路由信息
    在不使用keep-alive时,通过路由跳转到另一组件上时,上一个组件会被vue销毁,在次进入,页面会保持初始状态,不会对用户的更改保留,如果需要包作在某组件上的更改,就可以使用keep-aliv......
  • 缓存
    缓存的优点提高网站的访问速度适用于不易改变的数据缓存的位置服务器端(Web服务器)缓存服务器(集群服务器)客户端In-Memory内存缓存(存在于Web服务器,仅能在一......
  • 数据库缓存数据一致性保证
    一、背景在本文正式开始之前,需要先取得以下两点的共识:a)缓存必须要有过期时间b)保证数据库跟缓存的最终一致性即可,不必追求强一致性。数据一致性指的是:a)缓存中存......
  • MyBatis的二级缓存整合redis
    MyBatis自带的二级缓存存在的问题在前面我们使用@CacheNamespace​实现了430.MyBatis的二级缓存,这个底层使用HashMap​来实现。在单机环境下没有问题,但是在分布......
  • MyBatis的二级缓存整合redis
    MyBatis自带的二级缓存存在的问题在前面我们使用@CacheNamespace​实现了430.MyBatis的二级缓存,这个底层使用HashMap​来实现。在单机环境下没有问题,但是在分布......
  • MyBatis的二级缓存整合redis
    MyBatis自带的二级缓存存在的问题在前面我们使用@CacheNamespace​实现了430.MyBatis的二级缓存,这个底层使用HashMap​来实现。在单机环境下没有问题,但是在分布......
  • MyBatis的二级缓存整合redis
    MyBatis自带的二级缓存存在的问题在前面我们使用@CacheNamespace​实现了430.MyBatis的二级缓存,这个底层使用HashMap​来实现。在单机环境下没有问题,但是在分布......
  • MyBatis的二级缓存整合redis
    MyBatis自带的二级缓存存在的问题在前面我们使用@CacheNamespace​实现了430.MyBatis的二级缓存,这个底层使用HashMap​来实现。在单机环境下没有问题,但是在分布......
  • MyBatis的二级缓存整合redis
    MyBatis自带的二级缓存存在的问题在前面我们使用@CacheNamespace​实现了430.MyBatis的二级缓存,这个底层使用HashMap​来实现。在单机环境下没有问题,但是在分布......
  • MyBatis的二级缓存整合redis
    MyBatis自带的二级缓存存在的问题在前面我们使用@CacheNamespace​实现了430.MyBatis的二级缓存,这个底层使用HashMap​来实现。在单机环境下没有问题,但是在分布......