- 浏览: 191811 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
zyyedna:
你好,请问我用Captcha captcha = config ...
“ClientAbortException: java.net.SocketException:”异常的问题 -
15201493793:
大神arraylist完了,linkedList呢,set,m ...
Java源码解读——ArrayList(二) -
unbachone:
ensureCapacityInternal不是“确保内部容量 ...
Java源码解读——ArrayList(二) -
jssyjam:
/** * The maximum size of a ...
Java源码解读——ArrayList(二) -
jiangyeqt:
transient修饰符让elementData无法自动序列化 ...
Java源码解读——ArrayList(二)
【转】Java缓存技术介绍(JCS开源项目)-----索引磁盘备用缓存
- 博客分类:
- Java
对于JCS索引磁盘备用缓存是一个可选的插件,它主要的目的提供一个二级缓存,从而降低缓存对内存的压力。当内存缓存超出了最大值时,缓存处理会检查看是否为存储区配置了”disk”类型的备用缓存,如果使用了被索引的磁盘备用缓存,缓存中心会把从内存中删除的缓存项目保存到磁盘。
磁盘索引
被索引的磁盘备用缓存(The Indexed Disk Auxiliary Cache)是磁盘缓存的最快模式。项目被保存在用于缓存区文件的末尾,每个磁盘项目的第一个字节指定实体的长度,保存在内存中文件的开始位置引用了项目的键(key)。尽管这样依然需要内存开销,但是相对性能的提高,这些开销几乎微不足道。根据键(key)的大小,50万个磁盘实体仅可能需要大约3MB的内存。定位一个项目的位置像map的查找一样快,并且只需要2次磁盘访问。
在项目从磁盘缓存中删除时,存储文件上的有效存储区的位置被记录在一个排序的优化数组中,这个数组的大小不超过内存中允许的键(key)的最大数量。这样就允许磁盘缓存重用空白区域,因此保持了文件大小的最小化。
炼狱(Purgatory)
磁盘缓存的写处理是异步,并且通过使用一个叫做炼狱(purgatory)内存区域来提高效率。获取项目时,先检查炼狱(purgatory)然后检查磁盘。在项目被发送到purgatory的同时,也被放到了磁盘队列中。如果从purgatory中取得了一个项目,那么这个项目将不再被写到磁盘上,因为缓存中心会把它移动到内存中。使用purgatory确保了不需要等待磁盘的写处理,也避免了必要的项目边界的写处理,并且项目总是有效的。
持久化(Persistence)
在磁盘缓存正确关闭的时候,内存索引被写入磁盘并且值文件是被整理过的。当缓存启动的时候,磁盘缓存根据配置来读取或删除这个索引文件,这样提供了一个不可靠的持久化机制。
配置(Configuration)
配置方法很简单,在cache.cff配置文件的备用缓存段中就可以做到。在下面的例子中,创建了一个被DC引用的磁盘备用缓存,它使用的文件放在”DiskPath”目录中。
磁盘索引采用了LRU存储限定,通过maxKeySize参数配置了键的最大数量,如果最大键的大小小于0,将不限定键的数量,默认的最大键数是5000.
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=g:/dev/jakarta-turbine-stratum/raf
jcs.auxiliary.DC.attributes.MaxKeySize=100000
其他的配置选项
索引磁盘缓存提供一些额外的配置选项
磁盘缓存的purgatory的大小是用LRU规则进行存储限定。通过MaxPurgatorySize参数来设定purgatory中所允许的最大元素的数量,默认最大的purgatory的大小是5000.
测试表明在限定了键和purgatory的大小时候,磁盘缓存执行的更好。
jcs.auxiliary.DC.attributes.MaxPurgatorySize=10000
在项目从磁盘缓存中被删除时,数据文件中对应项目的位置就成为空位,索引磁盘缓存会在数据文件中保持空位置的轨迹,这样便于它们能够被重用。这个空位被保存在一个被优化的排序数组中---回收站。在索引缓存达到了指定的限定的大小的时候,最少使用的项目将从回收站中被删除。回收站的设定值(MaxRecycleBinSize)不能比缓存键(MaxKeySize)的设定值大,如果MaxKeySize的值小于0,那么回收站的默认值是5000。
如果所有放入磁盘缓存中项目的大小是相同的,那么回收站就将总是返回与磁盘缓存完全相同的匹配。但是,如果项目的大小不同,那么磁盘缓存将使用不小于,并且最接近准备写入磁盘的项目的大小的自自由位置,因此被回收的位置的大小将比实际写入磁盘的项目的大小要大,这样将有空白位置不能被使用。优化的目的就是删除这种缺陷。
jcs.auxiliary.DC.attributes.MaxRecycleBinSize=10000
通过配置,磁盘缓存能够在运行时整理数据文件,因为整理处理只是在项目被删除时才需要,所以整理的间隔时间是由删除处理的次数来决定的。当前没有方法在规定的时间来运行整理处理。如果把OptimizeAtRemoveCount参数设定为-1,那么直到缓存被关闭时才进行数据文件的优化处理,默认值是-1.
在JCS的1.2.7.0版本中,优化处理被明显的改善,在处理发生时不需要借助临时文件。
jcs.auxiliary.DC.attributes.OptimizeAtRemoveCount=30000
一个完整的配置实例
在这个例子的cache.cff文件中,把缓存配置成使用默认的叫做DC的磁盘缓存,同时也明确的把叫做myRegion1的缓存区设定给DC使用。为所有的索引缓存配置参数指定了定制的设定值。
##############################################################
##### Default Region Configuration
jcs.default=DC
jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.default.cacheattributes.MaxObjects=100
jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
##############################################################
##### CACHE REGIONS
jcs.region.myRegion1=DC
jcs.region.myRegion1.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.region.myRegion1.cacheattributes.MaxObjects=1000
jcs.region.myRegion1.cacheattributes.MemoryCacheName=org.apache.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=target/test-sandbox/indexed-disk-cache
jcs.auxiliary.DC.attributes.MaxPurgatorySize=10000
jcs.auxiliary.DC.attributes.MaxKeySize=10000
jcs.auxiliary.DC.attributes.OptimizeAtRemoveCount=300000
jcs.auxiliary.DC.attributes.OptimizeOnShutdown=true
jcs.auxiliary.DC.attributes.MaxRecycleBinSize=7500
使用线程池减少线程数
索引磁盘缓存允许使用比活动的存储区还要少的线程数,默认的情况下,磁盘缓存将使用标准的专用于线程的缓存事件队列。尽管标准队列会在工作线程停止工作一分钟后关闭它们,但是可以限制线程的总数,通过使用事件队列池可以达到这个目的。
下面的配置文件定义了一个叫做DC2的磁盘缓存,它使用POOLED类型的时间队列,这个队列被命名为disk_cache_event_queue。disk_cache_event_queue被定义在这个文件的底部。
##############################################################
################## DEFAULT CACHE REGION #####################
# sets the default aux value for any non configured caches
jcs.default=DC2
jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.default.cacheattributes.MaxObjects=200001
jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
jcs.default.cacheattributes.UseMemoryShrinker=false
jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds=3600
jcs.default.cacheattributes.ShrinkerIntervalSeconds=60
jcs.default.elementattributes=org.apache.jcs.engine.ElementAttributes
jcs.default.elementattributes.IsEternal=false
jcs.default.elementattributes.MaxLifeSeconds=700
jcs.default.elementattributes.IdleTime=1800
jcs.default.elementattributes.IsSpool=true
jcs.default.elementattributes.IsRemote=true
jcs.default.elementattributes.IsLateral=true
##############################################################
################## AUXILIARY CACHES AVAILABLE ################
# Disk Cache Using a Pooled Event Queue -- this allows you
# to control the maximum number of threads it will use.
# Each region uses 1 thread by default in the SINGLE model.
# adding more threads than regions does not help performance.
# If you want to use a separate pool for each disk cache, either use
# the single model or define a different auxiliary for each region and use the Pooled type.
# SINGLE is generally best unless you ahve a huge # of regions.
jcs.auxiliary.DC2=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory
jcs.auxiliary.DC2.attributes=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes
jcs.auxiliary.DC2.attributes.DiskPath=target/test-sandbox/raf
jcs.auxiliary.DC2.attributes.MaxPurgatorySize=10000
jcs.auxiliary.DC2.attributes.MaxKeySize=10000
jcs.auxiliary.DC2.attributes.MaxRecycleBinSize=5000
jcs.auxiliary.DC2.attributes.OptimizeAtRemoveCount=300000
jcs.auxiliary.DC.attributes.OptimizeOnShutdown=true
jcs.auxiliary.DC2.attributes.EventQueueType=POOLED
jcs.auxiliary.DC2.attributes.EventQueuePoolName=disk_cache_event_queue
##############################################################
################## OPTIONAL THREAD POOL CONFIGURATION ########
# Disk Cache Event Queue Pool
thread_pool.disk_cache_event_queue.useBoundary=false
thread_pool.remote_cache_client.maximumPoolSize=15
thread_pool.disk_cache_event_queue.minimumPoolSize=1
thread_pool.disk_cache_event_queue.keepAliveTime=3500
thread_pool.disk_cache_event_queue.startUpSize=1
发表评论
-
Mybatis返回特殊Map
2012-08-04 22:33 24965想返回个特殊实体,一个Map,key是一个表的一个字段的值,v ... -
JAVA可变参数方法及它的重载
2012-04-28 14:22 5300JAVA支持方法的可变参数。类似如下 public void ... -
Clone使用方法详解
2012-03-12 14:23 1048Java语言的一个优点就是 ... -
正确使用Volatile 变量
2012-01-19 13:26 989原文:http://www.ibm.com/dev ... -
apache jcs cache system 使用配置简介
2011-11-08 17:26 1609一 词汇理解 Elemen ... -
【转】用Java缓存机制创建更快的Web应用----简介和配置
2011-11-04 16:36 1678Web开发人员通过Java的缓存功能可以方便快捷的 ... -
【转】用Java缓存机制创建更快的Web应用----基本用法
2011-11-04 16:33 1497学习JCS的基本原理的一个好的方法是看它的API的最 ... -
【转】Java内存查看与分析
2011-11-02 17:46 1209业界有很多强大 ... -
【转】JAVA 单例模式与多线程
2011-11-02 17:29 4609单例模式单例模式是一种常见的设计模式,分三种:懒汉式单例 ... -
[转载]EJB3.0的各应用服务器提供的JNDI接口
2011-08-04 17:02 1185原文出自.№爱の冰封 的博客关于JNDI and EJB ... -
Java语言中定义常量注意事项解析
2011-07-19 22:06 1416一、常量定义的基本注意事项。 在 ... -
对Final参数的的一些理解
2011-07-14 14:46 3910今天在看《程序员修炼之道》的时候看到了以”fina ... -
【转】EJB3.0 EntityManager及相关概念
2011-07-12 17:47 2227EntityManager 概念图 ... -
Java异常处理之违背优秀编码规范的常见坏习惯
2011-07-07 09:31 2697你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Ja ... -
Java代码优化方案 J2ME内存优化
2011-07-06 17:55 1241原文出处:http://www.cnblogs.com/yan ... -
memcached全面剖析–PDF
2011-06-30 15:07 1332今天看到了Memcached,虽然不是什么新技术,不过之前没用 ... -
静态代码块(static{})详解
2011-06-27 16:28 2390静态代码块:即在类中的标有static修饰符的代码块,如: ... -
Servlet容器如何采用单实例多线程的方式来处理请
2011-06-21 19:28 1145如题:servlet采用单实例 ... -
【转】JAVA死锁解密
2011-06-17 11:17 1523一般来说,每一种使用 ... -
string,stringbuffer和stringbuilder的区别详解
2011-05-27 22:03 1411简要的说,String类型和StringBuffer类型的主要 ...
相关推荐
**JCS(Java Caching System)1.3 开源缓存架构详解** JCS(Java Caching System)是一个开源的、高性能的缓存框架,它主要用于提高应用的性能和响应速度,通过将常用数据存储在内存中,避免了频繁地访问数据库或...
java 缓存技术 oscache 和 JCS 的说明
Java Caching System(JCS)是一个高性能的、可扩展的分布式缓存系统,主要用于提高基于数据库的Web应用程序的性能。JCS是用Java语言编写的,它的设计目标是减少对数据库的访问频率,通过存储经常访问的数据在内存中...
《基于VB的JCS-A计数天平数据采集系统详解》 在信息技术与测量设备的融合中,数据采集系统扮演着至关重要的角色。本篇将深入探讨一个具体的应用实例——基于Visual Basic(VB)编程环境的JCS-A计数天平数据采集系统...
资源分类:Python库 所属语言:Python 资源全名:jcson-0.1.1-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
这些开源GIS工具和库在Java平台上的应用,大大降低了开发地理信息系统的技术门槛,同时提供了丰富的功能和灵活性,使得开发者可以根据项目需求定制自己的GIS解决方案。无论是数据的获取、处理、展示,还是与其他系统...
JCS(Java Caching System)是Apache软件基金会开发的一个开源的、分布式的对象缓存系统,主要用于提高应用程序的性能和可伸缩性。它通过存储经常访问的数据到内存中,减少了对数据库或其他资源的访问,从而加快了...
JCS(Java Caching System)是Apache软件基金会的一个开源项目,它提供了一种高效、灵活的缓存解决方案,特别适用于Web开发中的数据缓存需求。JCS的核心目标是提高应用程序的性能,通过在内存中存储经常访问的数据,...
JCS(Jakarta Caching System)是Apache Jakarta项目下的一个子项目,最初为Turbine项目的一部分,旨在为Java应用程序提供一个高效且灵活的分布式缓存解决方案。通过缓存常用数据,JCS有助于降低对数据库等后端系统...
总结来说,CAN总线是汽车电子系统中关键的通信技术,以其高效、可靠和灵活的特性在车载网络中广泛应用。它通过精心设计的数据帧结构、仲裁机制和物理层特性,实现了多节点间的稳定通信,并能适应各种复杂环境下的...
自制CHM版的API文档,带索引。 注:如果各位下载后打开或无法显示页面,请在CHM文件右键—属性—解除锁定即可。
标题和描述中的“J2EE WEB缓存技术详解”指向了一篇关于在Java Web应用程序中使用缓存技术的深入分析文章。文章由作者夏俊于2011年撰写,主要探讨了在处理大量数据时,如何通过实施缓存策略来优化系统性能,特别是...
2. 配置 JCS 配置文件(如 jcs-default.xml 和 jcs-region.xml),定义缓存区域、缓存策略等。 3. 在代码中使用 JCS API 进行缓存操作,如 `CacheManager.getInstance().getCache("缓存名")` 获取缓存实例,然后调用...
Java缓存技术是提高应用程序性能的关键手段,尤其是在处理大量数据或者频繁访问相同数据的场景下。本文将深入探讨几个常见的Java缓存框架及其特点,帮助开发者理解如何在项目开发中合理利用缓存。 首先,JBossCache...
ASF旗下有许多知名的项目,其中**Jakarta**是ASF早期的一个项目集合,它包含了多个Java相关的开源组件和技术。 Jakarta项目的目标在于为开发者提供一系列的工具和服务,特别是在Java和J2EE领域。Jakarta项目下包含...
Java Cache System(JCS)是一个开源的、基于内存的分布式缓存系统,主要用来提高应用程序的性能和响应速度。在大型分布式系统中,通过缓存关键数据,可以显著减少数据库的访问压力,从而提升整体系统的处理能力。...
首先,Ehcache是一个广泛使用的开源Java缓存解决方案,它提供了内存和磁盘存储的两级缓存机制,能够有效地减少对数据库的访问,提高系统响应速度。Ehcache支持多线程环境,具有丰富的API和配置选项,使得开发者可以...
2. **JCS (Java Caching System)**:JCS 是一个服务端缓存系统,它支持内存、磁盘、外围和远程四种核心区域。内存区域使用LRU策略,当内存满时,会淘汰最不常用的数据。磁盘区域则将超出内存容量的数据存储到硬盘上...
10. 应用案例:JCS-02已经广泛应用于各种工业自动化和机电一体化项目中,例如机器人技术、过程控制、自动化测试等领域。 压力继电器JCS-02是一种功能强大且可靠的继电器产品,广泛应用于工业自动化、机电一体化和...