JCS学习(1)

原创 2009年04月27日 18:02:00

最近一段时间比较空,看了一下JCS的用法,特将学习过程记录在此。

JCS是指java caching system,项目主页:http://jakarta.apache.org/jcs/index.html

看了jcs的源码,才发现原来缓存还可以这么写:之前在项目中用到的缓存(主要是LRU缓存,当然还有expiringLRU缓存,其实ExpiringLRU就是把LRU缓存再包装一下,加了个时间控制而已),它们的核心实现都是基于LinkedHashMap的,通过覆写removeEldestEntry来做到失效算法:

lrucache

但是jcs的缓存却不是这么简单实现的,jcs的缓存核心是一个双端列表(参见jcs源码中的LRUMemoryCache和DoubleLinkedList),然后通过一个控制器(这是我自己的叫法,等同于配置文件中的MemoryShrinker)来实现缓存的一些过期、持久化等操作。

下面来说说jcs的配置,先说region的配置,对于每一个region实例,主要是2方面的配置:cacheattributes和elementattributes,其实我觉得它们在某些配置项上是含糊不清的,也可能是我没有理解清楚吧,比如说cacheattributes中有MaxMemoryIdleTimeSeconds,这个是用来配置缓存项的最大空闲时间,如果在这个空闲时间内没有读取该缓存,那么就把它清理掉,比如说,我们把MaxMemoryIdleTimeSeconds配置为10秒,然后在应用中每隔2秒访问一下:cache.get(key),那这个key将一直存在,但我们如果超过10秒没有调用cache.get(key),那么再调用cache.get(key)的时候就是null了。但是elementattributes中也有个配置项:IdleTime,也是用来干这个事的(至少从名字上看是如此,去掉cacheattributes中的MaxMemoryIdleTimeSeconds,然后把IdleTime配置为10秒,可以得到一样的效果),当cacheattributes和elementattributes都配置这个选项时,elementattributes中的IdleTime其实是不起作用的。

当然,要让IdleTime和MaxMemoryIdleTimeSeconds起作用,首先要让UseMemoryShrinker=true。说到这里,就是我要说的第二个问题了:我觉得jcs的配置不是很“人性化”。

通常一些应用中的排行榜、xxx排名等,我们都会用缓存将他们保存起来,而且一般是ExpiringCache,这样他们就有一个过期时间,比如说是2分钟,或5分钟,超过这个时间再访问缓存,就会得到null,其实也就对应了jcs中的elementattributes.MaxLifeSeconds,但是在jcs中,你如果仅仅配置了elementattributes.MaxLifeSeconds,你会发现不起作用,为什么?原因就是elementattributes中的IsEternal默认是true!我们看看IsEternal的说明:You can turn off expiration by setting this to true. This causes the cache to bypass both max life and idle time expiration.(如果是true,将会忽略max life 和idle time)。所以说,配置了MaxLifeSeconds,还要将isEternal配置为false。同样的,isSpool,isLateral,isRemote等的默认值都是true,这也就意味着缓存失效时jcs会尝试flushed到硬盘?发送到远程主机上?(还没有去看具体的代码,所以这里是我猜的,但这些都是开关配置,为true的话,应该会做相应的尝试的)这样一来,缓存的效率应该会比较低吧?所以如果是仅仅用到了LRUCache和ExpiringCache,记得一定要在配置文件将isSpool,isLateral,isRemote,isEternal配置为false。

jcs用到了EDU.oswego.cs.dl.util.concurrent这个包(其实这个包都集成到了jdk5里面了,jcs也应该与时俱进了,呵呵),所以上面说到的isSpool,isLateral等操作应该都是另起线程来做的,缓存本身的put、get效率也应该不会有多大影响吧(还没看这部分的源码,所以是猜的,哈哈)。

好了,先写这么多,发现把学习过程写下来好累啊。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

浅谈我对JCS 的理解

JCS 是Java 中缓存的一种实现,支持将数据缓存到内存和硬盘中,支持设置缓存对象的有效时长。 我认为可以这么理解JCS:客户端向服务器发出请求,服务器就先去缓存中查一下有没有客户端请求的数据,...

JCS 实践

  • 2008-04-10 17:37
  • 36KB
  • 下载

JCS的初步探究

公司的项目一直用的是jcs来管理缓存的,最近老板让我们研究一下jcs2.0的使用。小弟不才,研究了一下,虽只学到了一点皮毛,但还是写出来和大家分享一下吧,希望可以给有兴趣的读者提供一些帮助。 首先不会...

jcs配置

接触了JCS,感觉还蛮好用,所以将其贡献出来,一起学习。jcs,是一个对象Cache,它可以把Java对象缓存起来,提高那些访问频率很高的Java对象的存取效率。特别是对于读操作远远多于写操作的应用性...

jcs 缓存服务器

  • 2015-10-19 09:20
  • 6.32MB
  • 下载

Jcs1.3.Jar

  • 2017-03-22 15:10
  • 520KB
  • 下载

JCS(Java Caching System)简介以及相关文档(cjsdn)

概述    JCS是Jakarta的项目Turbine的子项目。它是一个复合式的缓冲工具。可以将对象缓冲到内存、硬盘。具有缓冲对象时间过期设定。还可以通过JCS构建具有缓冲的分布式构架,以实现高性能的...

jcs缓存处理

  • 2014-03-11 10:29
  • 2.72MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)