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

使用ehcache时如何持久化数据到磁盘,并且在应用服务器重启后不丢失数据
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");

另外,持久化到硬盘的对象都需要是可序列化的,用以下方法处理:
a)如果类是你自己的,把他设置成可序列化
b)如果类中的某些属性是是第三方jar包的类,可以将它的字段设置成transient(不需序列化)
c)如果类中的某些属性是是第三方jar包但你一定要将所有属性都序列化,可以考虑将这些属性转化成json等

注意本文转载 未亲自验证

http://www.myexception.cn/web-application-server/1874474.html

时间: 2024-10-17 20:15:44

使用ehcache持久化数据到磁盘 并且在应用服务器重启后不丢失数据的相关文章

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

1.如何持久化到磁盘 使用cache.flush(),每次写入到cache后调用cache.flush() ,这样ehcache 会将索引(xxx.index)回写到磁盘.这样就不用担心程序是否非正常退出导致缓存丢失了. 2.附上配置文件修改: <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" na

服务器硬盘亮红灯重启后同步了数据还能恢复吗

服务器是企业的基本配置之一,无论大小企业几乎都会配置一台服务器自用.那么在这个服务器日渐普遍的同时服务器数据恢复和服务器运维服务却并没有与之同时进步和普及.今天给大家说说服务器中如果有硬盘坏了应该怎么进行数据恢复.下面是一个服务器硬盘故障的真实数据恢复案例: 发生故障的服务器里面有多块硬盘组成了raid磁盘阵列,某天服务器突然瘫痪,管理员查看时才发现阵列中已经有两块硬盘的状态灯是红色了(如果管理员经常查看服务器状态,在第一块硬盘故障时及时更换,也就不会出现现在的故障了).这时管理员进行了一个多数

XHNetworkCache,一行代码将请求数据写入磁盘缓存

XHNetworkCache 版本记录(持续更新)2016.07.01 Version 1.1(更新) 1.增加手动清除缓存接口 2.增加获取缓存大小接口 2016.06.24 Version 1.0(发布)使用方法:1.写入 [Objective-C] 查看源文件 复制代码 ? 1 2 3 //将数据写入磁盘缓存(参数1:服务器返回的JSON数据, 参数2:数据请求URL) //[按APP版本号缓存,不同版本APP,同一接口缓存数据互不干扰] [XHNetworkCache saveJsonR

电脑重装系统后丢失数据怎么找回?

当电脑出现一些故障的时候,我们选择电脑重装系统,但是重装系统后最大的问题是会造成数据的丢失,那么丢失的数据还能找回吗?那应该如何找回电脑重装系统后的数据呢?继续往下看. 重装系统影响最大的是C盘,所以大多保存在C盘里的数据都会丢失,如果没有备份的话,那么在接下来的操作中就不要在对电脑磁盘进行数据的写入,不然覆盖了数据之后,就会导致恢复难度加大,更严重的是数据就无法找回了 第一步:打开迷你兔数据软件,点击左下侧的"开始恢复",进入磁盘扫描界面 第二步:左边显示"我的电脑&quo

Redis 持久化,写入磁盘的方式

Redis是一个支持持久化的内存数据库=>也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化. redis支持四种持久化方式, 一是 Snapshotting(快照)也是默认方式: 二是Append-only file(缩写aof)的方式: 三是虚拟内存方式: 四是diskstore方式. 一)Snapshotting 快照是默认的持久化方式.这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb.可以通过配置设置自动做快照持久化的方式.我们可以配置

数据库管理系统之存储数据:磁盘和文件

9.1 存储层次 计算机的存储是按照层次组织的.顶层是主存储器,由高速缓存和主存组成,并提供数据的快速访问.接下去是第二级存储器,由较慢的磁盘等设备组成.第三级存储器是最慢的存储设备,如光盘和磁带. 磁带是相对便宜的存储设备,能存储大容量的数据,主要缺点是磁带是顺序存取设备,必须顺序的经过所有的数据,而不能直接访问磁带的某一位置,因此磁带不适合用于存储操作型数据或频繁存取的数据,磁带主要用于阶段性的操作型数据的备份. 磁盘支持对给定地址的直接访问,被广泛用于数据库应用.数据以磁盘块为单位存储在磁

mysql之mysql数据在磁盘的储存方式

mysql的数据在磁盘上的存储:    数据块:        由多个磁盘block组成的块,存储引擎负责管理数据块. 磁盘是block块设备,数据在磁盘上的存放也是按照块存放的.        mysql读取表到内存的时候,也必许按照一块一块的方式读取.假设要查询的表在和其他表在都在同一个块内.加载块的时候除了读取要查询的表,其他表也一并被读取出来. 当一个块内的部分表被删除时,这是就是形成了碎片.这样会降低装载到内存的速度. 所以会生成一个块头,记录一个快内表的大小,有无空闲空间,空闲空间的

数据库学习笔记:第九章 存储数据:磁盘和文件

第九章 数据以磁盘块为单位存储在磁盘上.块分布于一张或多张盘片的同心环形磁道上.磁道可以在盘片的单面或双面上录制. 同一直径的所有磁道的集合称为柱面. 磁盘块的大小在磁盘初始化时可以被设置成扇区大小的倍数. 每一个记录的表面都有一个磁盘头阵列.读写一块时,磁头必须定位在块头位置. 不能并行读写的主要原因是很难保证所有磁头被精确定位在相应的磁道上. 磁盘控制器是磁盘驱动器与计算机的接口. 当数据被写到扇区时,需要计算校验和并存储在扇区上,当扇区上的数据被独处时,需要再次校验和. 寻道时间是用于移动

zabbix对数据盘磁盘容量进行监控

示例将数据盘挂载到 /mnt目录 , 对 /mnt目录进程容量监控 item 添加对 /mnt 目录的监控项 tragger 添加触发项 这样完成对一个数据盘磁盘容量的监控 原文地址:https://www.cnblogs.com/weifeng1463/p/9743663.html