首先说一下ehcache的好处。
ehcache是本机缓存,而非memcache是远程缓存,ehcache的缓存是在当前jvm里的,这使得内存是可重用的。所以其性能是远过memcache的。
1、免去了远程IO时间。
2、免去了memcache这种取回来以后要申请内存的时间。
3、大大差少了full gc的次数。
ehcache的缓存方式与cuncurrentHashmap相似,一系列segment,每个segment里有一个hashmap这种。
下面介绍正题,它的缓存失效机制。
我会在最下面贴出我的配置,请大家看看我是不是配的有问题。
一、网上说,这个玩意他有一个后台的守护线程,在不定时的清理缓存。还说设置diskExpiryThreadIntervalSeconds能影响这个线程运行间隔时间。
我在2.4里没找着这个代码。jvm里也没有这个线程。
里面虽有一个用java.util.timer这个定时器开启的后台线程,但是它只启动了一个自动更新的程序。
所以我认为网上又在以讹传讹了。
二、LRU、LFU 和 FIFO
我本是想看看他的lru算法是怎么实现的,但是看了以后很失望,又想了一会感觉其实实现的也很好,缓存不用清的那么精确。
他是这样实现的:
他有一个基数是30.
比如你现在设了缓存最大数是10,你put了10个缓存进去。当你put第11个的时候,他对比10和30,取最小值10,把10个缓存都取出来,或lru或fifo。
比如你现在设了缓存最大数是1000,你put了1000个缓存进去。当你put第1001个的时候,他对比1000和30,取最小值30,然后随机在缓存里找出30个缓存出来,或lru或fifo。
看到了吧,他的缓存清理机制不怎么精确。
这个代码的位置:
net.sf.ehcache.store.compound.Segment的put方法的这句Object encoded = create(key, element);里执行的上面的动作。
然后进入了net.sf.ehcache.store.compound.factories.CapacityLimitedInMemoryFactory这个类执行的public Element create(Object key, Element element)进行清理。
这是我这两天看这个代码得到的结果。
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd">
<diskStore path="java.io.tmpdir"/>
<cacheManagerEventListenerFactory class="" properties=""/>
<!--<diskStore path="java.io.tmpdir"/>
-->
<cacheManagerPeerListenerFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
properties="hostName=192.168.27.125,
port=10002,
socketTimeoutMillis=120000"/>
<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=manual,rmiUrls=//192.168.27.125:10001/user" />
<defaultCache
maxElementsInMemory="10"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
<!-- WEB cache-->
<cache name="user"
maxElementsInMemory="1000"
maxElementsOnDisk="1000"
eternal="false"
overflowToDisk="false"
diskPersistent="false"
memoryStoreEvictionPolicy="LRU"
timeToIdleSeconds="600"
timeToLiveSeconds="0"
diskSpoolBufferSizeMB="50"
diskExpiryThreadIntervalSeconds="10"
>
<cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" />
</cache>
</ehcache>
分享到:
相关推荐
1.解压缩到目录下,复制ehcache-monitor-kit-1.0.0\lib\ehcache-probe-1.0.0.jar包到application的web-inf/lib目录下 2.将以下配置copy的ehcache.xml文件的ehcache标签中,注:上述链接中说的配置少写了个probe包名...
具有集群支持的 Ehcache 3(ehcache-clustered-3.8.1-kit.zip)
Mybatis-ehcache 1.2.1源码(ehcache-cache-mybatis-ehcache-1.2.1.tar.gz)
Mybatis-ehcache 1.2.1源码(ehcache-cache-mybatis-ehcache-1.2.1.zip)
ehcache所需的ehcache-core-2.5.2.jar及其源码ehcache-core-2.5.2-sources.jar
ehcache-core-2.6.10.jar依赖包 MyBatiesEhCache二级缓存 Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个...
ehcache缓存jar(ehcache-core-2.4.6.jar+ehcache-web-2.0.4.jar)
ehcache1.6,ehcache-web-2.0.4,slf4j-api-1.7.21.jar 不好意思,缺点分用。。
赠送jar包:ehcache-web-2.0.4.jar; 赠送原API文档:ehcache-web-2.0.4-javadoc.jar; 赠送源代码:ehcache-web-2.0.4-sources.jar; 赠送Maven依赖信息文件:ehcache-web-2.0.4.pom; 包含翻译后的API文档:...
赠送jar包:ehcache-core-2.6.11.jar; 赠送原API文档:ehcache-core-2.6.11-javadoc.jar; 赠送源代码:ehcache-core-2.6.11-sources.jar; 赠送Maven依赖信息文件:ehcache-core-2.6.11.pom; 包含翻译后的API文档...
ehcache-2.7.3-distribution.tar.gz
赠送jar包:ehcache-3.9.9.jar; 赠送原API文档:ehcache-3.9.9-javadoc.jar; 赠送源代码:ehcache-3.9.9-sources.jar; 赠送Maven依赖信息文件:ehcache-3.9.9.pom; 包含翻译后的API文档:ehcache-3.9.9-javadoc-...
赠送jar包:ehcache-core-2.6.11.jar; 赠送原API文档:ehcache-core-2.6.11-javadoc.jar; 赠送源代码:ehcache-core-2.6.11-sources.jar; 赠送Maven依赖信息文件:ehcache-core-2.6.11.pom; 包含翻译后的API文档...
赠送jar包:shiro-ehcache-1.4.0.jar; 赠送原API文档:shiro-ehcache-1.4.0-javadoc.jar; 赠送源代码:shiro-ehcache-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-ehcache-1.4.0.pom; 包含翻译后的API文档...
用于ehcache-core-ee-2.4.1 企业级功能。比如ehcache的offheapsize设置
含有 三个版本:ehcache-core-2.6.11 ;ehcache-core-2.6.9;ehcache-core-2.5.0
ehcache-spring-annotations-1.2.0.jar
Ehcache 2.10.8(bigmemory-max-4.3.8.4.2.tar.gz)
ehcache-spring-annotatios是获得Apache认证的...2.0版本实现缓存的技术,1.1.2版本的ehcache-spring-annotations刚刚发布不久,在本文中,我将会介绍如何在一个web工程时使用ehcache-spring-annotations实现缓存机制。
ehcache-spring-annotations-1.1.2.jar