통합 분산 캐시으로 Ehcache를 보조 캐시 구현의 MyBatis

 MyBatis로는 보조 캐시를 제공하지만,이 캐시는 단일 서버의 작업, 분산 캐시를 달성 할 수 없다. 그래서 캐시를 어떻게 배포? 쿼리 캐시는 서버에 배치됩니다 후 2 사용자가 서버가 서버 1에 액세스 액세스 할 때 사용자가 현재 서버에 액세스 할 수 있다고 가정, 거기에 2 가정은 2, 그는 서버 (2)에되지 않을 것 아래 그림과 같이 그냥 캐시를 얻을 :

    이 문제를 해결하기 위해, 우리는 다음과 같이 데이터 페치 버퍼는, 그것에서 가져 거기에 저장된 데이터를 캐시에 서로 다른 서버 있도록 캐시 된 데이터를 저장하기 위해 설계된 분산 캐시를 찾을 수있다 : 

 

    위와 같이, 여러 서버간에, 우리는 타사 캐싱 프레임 워크, 캐시는 다음에 상관없이 많은 서버, 우리는 캐시에서 데이터를 얻을 수있는 방법이 타사 프레임 워크에 배치되지 않는다 사용합니다.

 여기에서 우리는 타사와의 통합은 MyBatis로의으로 Ehcache를 프레임 워크 소개합니다.

 당신은 캐시를 달성하기 위해, 인터페이스 개발을 자신의 캐시 로직을 구현하려는 경우 MyBatis로는 캐시 인터페이스를 제공, 위에서 언급 한 시작입니다. MyBatis로 자체는 기본적를 구현하지만,이 캐시 분산 캐시를 실현하기 위해 달성 될 수 없다, 그래서 우리는 스스로를해야한다. 으로 Ehcache 분산 캐시 할 수는 MyBatis로는 캐시 인터페이스에 대한으로 Ehcache 구현 클래스,이 클래스의 MyBatis를 제공하고있는 통합 패키지를 EHCache는.

① (맨 소스 코드를 포함)의 MyBatis-으로 Ehcache 통합 패키지를 도입

<dependency>
	<groupId>org.mybatis.caches</groupId>
	<artifactId>mybatis-ehcache</artifactId>
	<version>1.1.0</version>
</dependency>

 

② 글로벌 구성 파일의 MyBatis-의 configuration.xml에 캐시를 엽니 다

<!--开启二级缓存  -->
<settings>
    <setting name="cacheEnabled" value="true"/>
</settings>

③, 통합으로 Ehcache 캐시 맵 파일 xxxMapper.xml 파일

<!-- 开启本mapper的namespace下的二级缓存
    type:指定cache接口的实现类的类型,
不写type属性,mybatis默认使用PerpetualCache作为默认的二级缓存,不具有分布式缓存的能力
要和ehcache整合,需要配置type为ehcache实现cache接口的类型
-->
<cache type="org.mybatis.caches.ehcache.EhcacheCache"></cache>

④ 캐시 매개 변수를 구성

클래스 경로 디렉토리에 새 파일을 만들고 다음 설정을 추가 Ehcache.xml :

<?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd"> <diskStore path="F:\develop\ehcache"/> <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" maxElementsOnDisk="10000000" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU"> <persistence strategy="localTempSwap"/> </defaultCache> </ehcache>

diskStore:指定数据在磁盘中的存储位置。
 defaultCache:当借助CacheManager.add("demoCache")创建Cache时,EhCache便会采用<defalutCache/>指定的的管理策略
以下属性是必须的:
 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(先进先出)

추천

출처www.cnblogs.com/ww25/p/11075558.html