`
iamxi
  • 浏览: 191811 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

【转】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.

 

JCS1.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_queuedisk_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

分享到:
评论

相关推荐

    JCS1.3开源的缓存架构

    **JCS(Java Caching System)1.3 开源缓存架构详解** JCS(Java Caching System)是一个开源的、高性能的缓存框架,它主要用于提高应用的性能和响应速度,通过将常用数据存储在内存中,避免了频繁地访问数据库或...

    java 缓存技术

    java 缓存技术 oscache 和 JCS 的说明

    jcs.rar_JCS_Java Caching System_jcs java

    Java Caching System(JCS)是一个高性能的、可扩展的分布式缓存系统,主要用于提高基于数据库的Web应用程序的性能。JCS是用Java语言编写的,它的设计目标是减少对数据库的访问频率,通过存储经常访问的数据在内存中...

    JCS-A-counting-scale-data-collection.rar_scale

    《基于VB的JCS-A计数天平数据采集系统详解》 在信息技术与测量设备的融合中,数据采集系统扮演着至关重要的角色。本篇将深入探讨一个具体的应用实例——基于Visual Basic(VB)编程环境的JCS-A计数天平数据采集系统...

    Python库 | jcson-0.1.1-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:jcson-0.1.1-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    开源GIS---java系列

    这些开源GIS工具和库在Java平台上的应用,大大降低了开发地理信息系统的技术门槛,同时提供了丰富的功能和灵活性,使得开发者可以根据项目需求定制自己的GIS解决方案。无论是数据的获取、处理、展示,还是与其他系统...

    jcs缓存所需要的包

    JCS(Java Caching System)是Apache软件基金会开发的一个开源的、分布式的对象缓存系统,主要用于提高应用程序的性能和可伸缩性。它通过存储经常访问的数据到内存中,减少了对数据库或其他资源的访问,从而加快了...

    jcs缓存处理

    JCS(Java Caching System)是Apache软件基金会的一个开源项目,它提供了一种高效、灵活的缓存解决方案,特别适用于Web开发中的数据缓存需求。JCS的核心目标是提高应用程序的性能,通过在内存中存储经常访问的数据,...

    JCS简介

    JCS(Jakarta Caching System)是Apache Jakarta项目下的一个子项目,最初为Turbine项目的一部分,旨在为Java应用程序提供一个高效且灵活的分布式缓存解决方案。通过缓存常用数据,JCS有助于降低对数据库等后端系统...

    CAN总线知识-JCS-2022-09-25.pptx

    总结来说,CAN总线是汽车电子系统中关键的通信技术,以其高效、可靠和灵活的特性在车载网络中广泛应用。它通过精心设计的数据帧结构、仲裁机制和物理层特性,实现了多节点间的稳定通信,并能适应各种复杂环境下的...

    jcs-1.3-javadoc.chm

    自制CHM版的API文档,带索引。 注:如果各位下载后打开或无法显示页面,请在CHM文件右键—属性—解除锁定即可。

    J2EE WEB缓存技术详解.doc

    标题和描述中的“J2EE WEB缓存技术详解”指向了一篇关于在Java Web应用程序中使用缓存技术的深入分析文章。文章由作者夏俊于2011年撰写,主要探讨了在处理大量数据时,如何通过实施缓存策略来优化系统性能,特别是...

    jcs-1.3资源包

    2. 配置 JCS 配置文件(如 jcs-default.xml 和 jcs-region.xml),定义缓存区域、缓存策略等。 3. 在代码中使用 JCS API 进行缓存操作,如 `CacheManager.getInstance().getCache("缓存名")` 获取缓存实例,然后调用...

    Java缓存讨论.pdf

    Java缓存技术是提高应用程序性能的关键手段,尤其是在处理大量数据或者频繁访问相同数据的场景下。本文将深入探讨几个常见的Java缓存框架及其特点,帮助开发者理解如何在项目开发中合理利用缓存。 首先,JBossCache...

    Apache java项目全介绍

    ASF旗下有许多知名的项目,其中**Jakarta**是ASF早期的一个项目集合,它包含了多个Java相关的开源组件和技术。 Jakarta项目的目标在于为开发者提供一系列的工具和服务,特别是在Java和J2EE领域。Jakarta项目下包含...

    一个简单jcs实例,一看就会的程序

    Java Cache System(JCS)是一个开源的、基于内存的分布式缓存系统,主要用来提高应用程序的性能和响应速度。在大型分布式系统中,通过缓存关键数据,可以显著减少数据库的访问压力,从而提升整体系统的处理能力。...

    本地缓存(一)ehcache/jcs/cache4j/jcs的性能测试与使用场景分析

    首先,Ehcache是一个广泛使用的开源Java缓存解决方案,它提供了内存和磁盘存储的两级缓存机制,能够有效地减少对数据库的访问,提高系统响应速度。Ehcache支持多线程环境,具有丰富的API和配置选项,使得开发者可以...

    JAVAWEB缓存技术

    2. **JCS (Java Caching System)**:JCS 是一个服务端缓存系统,它支持内存、磁盘、外围和远程四种核心区域。内存区域使用LRU策略,当内存满时,会淘汰最不常用的数据。磁盘区域则将超出内存容量的数据存储到硬盘上...

    压力继电器JCS-02[归纳].pdf

    10. 应用案例:JCS-02已经广泛应用于各种工业自动化和机电一体化项目中,例如机器人技术、过程控制、自动化测试等领域。 压力继电器JCS-02是一种功能强大且可靠的继电器产品,广泛应用于工业自动化、机电一体化和...

Global site tag (gtag.js) - Google Analytics