Hibernate 二级缓存和查询缓存的搭建(注解篇)

缓存框架有很多,诸如:JCACHE,OSCache ,Java Caching System

其实很难说哪个缓存框架好,哪个不好,只有哪个最适用,现在项目使用的是hibernate ,那么直接无脑上他的本家ehcache

开门见山不罗嗦,直接说用法!

1.适用范围:比较少更新的表,这不是Ehcache的使用范围,这是Hibernate所有二级缓存的原则,不论你用什么缓存架构,在二级中必须要遵守这个原则。包括(update,insert,delete等)

2.关于并发:并发要求不是很严格(其实要求并非也可以,请 用 搜索引擎 搜关键字 “EHCache 成员发现”)

3.关于同步:两台机子(是指服务器,有兄弟问我,是用户机吗?不是的,用户机的缓存叫 本地缓存)在没有外力作用下,将无法同步(貌似是废话。)

关于参数:

这部分是大家最关心的了:

eternal(必须配置):如果为true,则永不过期,将忽略掉 timeToIdleSeconds 和 timeToLiveSeconds

timeToIdleSeconds :最大闲置时间从最后一次访问开始计算多久后失效。总时长不会超过timeToLiveSeconds(单位 秒)

timeToLiveSeconds: 最大存活时间无视闲置还是访问到时间直接失效。(单位 秒

(例如:timeToIdleSeconds=120;timeToLiveSeconds=180;持续两分钟不访问过期,最大存活时间三分钟。)

overflowToDisk:当内存中缓存数超出限制之后是否缓存到硬盘上,(true/false)值得注意的是,硬盘缓存的效率较慢。是否需要,如何处理,根据实际情况而定吧。

diskPersistent :这个参数的真正含义是,将硬盘缓存序列化到实体中(Vm启动时。)

diskExpiryThreadIntervalSeconds :真正含义是多久清理一次磁盘。(单位 秒)

memoryStoreEvictionPolicy:同样一个被误解最多的参数,这个是说如果内存缓存到最大了,还在往内存中Put缓存的时候如何清除旧缓存,提供三种方式:

(1) FIFO first in first out (先进先出). 都知道了,顾名思义,不解释了。

(2)LFU  Less Frequently Used (最少使用的被移除原则),缓存中有一个Hit参数记录的是命中率,使用最少的那个将被舍弃。

(3)LRU Least Recently Used(距离当前时间最远原则),此时如果缓存慢了,将触发移除策略,如果为LRU,那么将把最早缓存的那个Kill掉。不论使用率的高低。

一个注意点:

在网上看了很多的配置,也看一些共享的控制台信息,发现了一个问题,很多人喜欢用缺省配置,这也可以,但是如果控制台有以下Log:

net.sf.ehcache.config.ConfigurationFactory - No configuration found. Configuring ehcache from ehcache-failsafe.xml  found in the classpath: jar:file:........................(项目信息省略)

这确实用了缺省配置,但是很不幸的是,用的是jar包自带的缺省配置,也就是说,这仅仅能用二级缓存最基础的一些功能,如果您想使用硬盘缓存,缓存策略等,都无法满足。

为什么会这样,我明明指定了ehcache的位置啊。呵呵,问题就在这,设置资源文件,不仅仅是在这里,很多方式都可以设置,方式我就不说了,但是如果出现这种问题,如果你没有 代码强迫症的话,请将这个文件放到classe的根目录。

未完陆续



你可能感兴趣的:(Hibernate 二级缓存和查询缓存的搭建(注解篇))