当前位置:首页 > 开发 > 编程语言 > 缓存Cache > 正文

ehcache2.4源码分析 ---- 持久化

发表于: 2011-12-16   作者:付星烨   来源:转载   浏览:
摘要: 参数: overflowToDisk="true"  当为true时会持久化到硬盘,并非超出内存最大数时才会 diskPersistent="true"  当为false时,manager.shutdown()时会清空硬盘文件,下次启动时不会读取。为true时,manager.shutdown()时会保留硬盘文件,下次启动会读取。
参数:
overflowToDisk="true"  当为true时会持久化到硬盘,并非超出内存最大数时才会
diskPersistent="true"  当为false时,manager.shutdown()时会清空硬盘文件,下次启动时不会读取。为true时,manager.shutdown()时会保留硬盘文件,下次启动会读取。

当缓存为可持久化时,会用到这个工具
net.sf.ehcache.store.disk.DiskStorageFactory
protected DiskMarker write(Element element) throws IOException
protected Element read(DiskMarker marker) throws IOException, ClassNotFoundException

写的时候,put内存成功后,比如当前硬盘文件为空,则data文件的末尾position=0,element序列化后,用java.io.RandomAccessFile把内容异步写进硬盘。同时内存中data文件的末尾position+内容的size,而本element的position和size将会在内存中记录。如果不为空,则从内存中读出当前的data文件的末尾position来用。

data文件的末尾position这个值,他维护了一棵所有position组成的AA树。从这个树里找到最大的返回。我没看明白这个树有什么毛用,可能是为了以后的功能而预先写在这里的吧。也许在更高的版本里就有用了

当manager.shutdown()时,先生成一个XXX.index文件,把内存中记录的所有element的position和size都写进这个文件里。同时data文件的末尾position也会写进去。

当启动的时候,首先会把XXX.index里的内存全部加进内存,这相当于一个索引嘛。
当你get key='asd'时,先看索引里有没有asd,没有则不查硬盘data,有则先看内存中有无本element,有则取出返回,没有则取出其position和size,把data中的相应内容读出。先缓存到内存,再return.


我那天在网上看到有些朋友想用ehcache代替nosql,看了我上面的文章后,你不要再做这事了。这两种东西完全不是一个级别的东西。ehcache就是个缓存,没啥安全措施等数据库要有的特性。也存不了特大的文件。

ehcache2.4源码分析 ---- 持久化

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
KFS文件系统的MetaServer元数据的持久化采用的是checkpoint + log方式,下面将结合其源码,对KFS Me
EntityManagerFactory factory = Persistence.createEntityManagerFactory("itcast"); 讲解下这个方
引入 在解压Hibernate有好几十兆就感觉这比Struts大多了,应该比Struts要深奥一些果然是这样,不过
我们在对rabbimq进行性能测试时发现在单个队列的情况下,无论怎么压qps都上不去,而此时服务器的cpu
前面有一篇说了spring的解析xml,解析xml最终的作用就是生成BeanDefinition。而实例化的时候会先得
前面有一篇说了spring的解析xml,解析xml最终的作用就是生成BeanDefinition。而实例化的时候会先得
前面有一篇说了spring的解析xml,解析xml最终的作用就是生成BeanDefinition。而实例化的时候会先得
Spark最重要的一个功能,就是在不同操作间,持久化(或缓存)一个数据集在内存中。当你持久化一个RD
Redis由于支持非常丰富的内存数据结构类型,如何把这些复杂的内存组织方式持久化到磁盘上是一个难题
tomcat6 中关闭服务 会自动把session持久化 存储在work目录下的 一个session.ser 对于Session的管理
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号