您的位置:首页 > 其它

使用ehcache时如何持久化数据到磁盘,并且在应用服务器重启后不丢失数据

2015-03-30 14:56 453 查看
1、如何持久化到磁盘

使用cache.flush(),每次写入到cache后调用cache.flush() ,这样ehcache 会将索引(xxx.index)回写到磁盘。这样就不用担心程序是否非正常退出导致缓存丢失了。

2、附上配置文件修改:

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd" name="ehcache">
<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=manual"/>

<diskStore path="d:/ehcache"/>
<cache name="submitProcessInst" maxElementsInMemory="1" eternal="true"
overflowToDisk="true" diskSpoolBufferSizeMB="10" maxElementsOnDisk="1000000"
diskPersistent="true" memoryStoreEvictionPolicy="LRU">
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" />
<!-- 比一般配置多了这个 -->
<bootstrapCacheLoaderFactory class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"/>
</cache>

</ehcache>
注意:当不需保存数据在内存中时,将maxElementsInMemory="1",而不是0,设置为0时,可以看到ehcache有warning:

2015-03-10 10:44:28,469 WARN net.sf.ehcache.config.CacheConfiguration.warnMaxEntriesLocalHeap(CacheConfiguration.java:1601) - Cache: submitProcessInst has a maxElementsInMemory of 0. This might lead to performance degradation or OutOfMemoryError at Terracotta
client.From Ehcache 2.0 onwards this has been changed to mean a store with no capacity limit. Set it to 1 if you want no elements cached in memory

3、系统初始化时添加:

System.setProperty(net.sf.ehcache.CacheManager.ENABLE_SHUTDOWN_HOOK_PROPERTY,"true");

4、在web.xml添加listener,让应用程序关闭时通知ehcache

<listener>
<listener-class>net.sf.ehcache.constructs.web.ShutdownListener</listener-class>
</listener>


5、修改ehcache源码,让它不会轻易删除index文件,因为index文件若删除了,cache数据就会清零。

修改ehcache源码中的 net.sf.ehcache.store.disk.DiskStorageFactory类中的 DiskStorageFactory 方法,注释最后else if 的代码



另外,持久化到硬盘的对象都需要是可序列化的,用以下方法处理:

a)如果类是你自己的,把他设置成可序列化

b)如果类中的某些属性是是第三方jar包的类,可以将它的字段设置成transient(不需序列化)

c)如果类中的某些属性是是第三方jar包但你一定要将所有属性都序列化,可以考虑将这些属性转化成json等

ehcache版本:ehcache-core-2.5.2.jar

集群中使用ehcache
http://www.ibm.com/developerworks/cn/java/j-lo-ehcache/ http://www.cnblogs.com/yangy608/archive/2011/10/07/2200669.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐