非常感谢 http://blog.csdn.net/lfsfxy9/article/details/22696459
缓存技术学习 https://www.itkc8.com
索引式硬盘缓冲,作为内存缓存的一个辅助,它主要的目的提供一个二级缓存,从而降低缓存对内存的压力。当内存缓存超出了最大值时,缓存处理会检查看是否为存储区配置了”disk”类型的备用缓存,如果使用了被索引的磁盘备用缓存,缓存中心会把从内存中删除的缓存项目保存到磁盘。
这个就是我们经常要用到的,为了避免服务器的内存溢出,同时保证但内存缓存区超过限制时,缓存的内容不丢弃。只需要指定缓冲临时文件的存放目录位置。硬盘缓冲将缓冲对象的内容写到文件上,但是将访问索引保存在内存中,因此也能够达到尽可能高的访问效率。
这种硬盘缓存又分为两种。 一是并行式的分布缓冲(Lateral), 通常,将对象缓冲在内存中,一方面提高了应用的性能,而另一方面却使得应用不可以分布式发布。场景假设:一个应用配置在两台服务器上并行运行,而两台服务器单独缓冲,则很容易导致两个缓冲区内容出现版本上的不一致而出错。一个机器上修改了数据,这个动作会影响到本地内存缓冲区和数据库服务器,但是却不会通知到另一台服务器,导致另一台上缓冲的数据实际上已经无效了。
并行式的分布缓冲可以解决分布式缓存不同步更新的问题,今天只介绍一下单机硬盘缓存示例:
配置文件:
# CACHE REGIONS ,这里需要把硬盘缓存DC配置到此 jcs.region.testCache1=DC jcs.region.testCache1.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes jcs.region.testCache1.cacheattributes.MaxObjects=10 jcs.region.testCache1.cacheattributes.MemoryCacheName=org.apache.commons.jcs.engine.memory.lru.LRUMemoryCache
# AUXILIARY CACHES # Indexed Disk Cache jcs.auxiliary.DC=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory jcs.auxiliary.DC.attributes=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes jcs.auxiliary.DC.attributes.DiskPath=d:/dev/jcs/raf # 在内存中与磁盘缓存对象所对应的个数 jcs.auxiliary.DC.attributes.MaxPurgatorySize=10000 # 设置key文件中缓冲对象个数 jcs.auxiliary.DC.attributes.MaxKeySize=10000 # 删除处理的次数超过300000后对数据文件进行整理 jcs.auxiliary.DC.attributes.OptimizeAtRemoveCount=300000 jcs.auxiliary.DC.attributes.OptimizeOnShutdown=true # 保留key文件中已在data文件被删除对象的个数,需要符合内存算法 jcs.auxiliary.DC.attributes.MaxRecycleBinSize=7500 |
硬盘缓存文件:
运行测试代码,如果对testCache1区域缓存1000个数据对象,超过缓存配置(MaxObjects=10)的对象即缓存到硬盘缓冲文件中,对缓存对象进行删除等操作,还可以通过配置来自动整合数据文件等等。
缓存技术学习 https://www.itkc8.com
参考: