一、下载:
1、从
2、从http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html 处下载大名鼎鼎的并行算法大师Doug Lea的concurrent.zip,因为jcs用到了里面的一个类。目前还只提供了源代码,需要自己编译。假设将zip包解压缩到了concurrent_src目录下,则从cmd下进入到该目录下后输入命令javac -d concurrent_classes -Xlint:unchecked concurrent_src/*.java(-d表示将编译后的类文件放到concurrent_classes目录下,注意需要自己先创建这个目录,后面的参数表示忽略一些警告和安全,如果不使用将编译失败)。
编译之后还只得到了类文件,为了方便使用可以将它们打成jar包,从cmd进入刚刚创建的concurrent_classes目录下,执行jar cvf concurrent.jar ./EDU命令就得到了一个名为concurrent.jar的包,然后与第1步的包一起使用即可。
二、使用:相当简单
1、配置文件cache.ccf。这个文件非常重要,它配置得好坏也可以产生很大的性能影响。具体配置可参见 http://jakarta.apache.org/jcs/BasicJCSConfiguration.html 。下面是我的配置文件(注意:每个属性必须在一行,为了排版我有些断成了两行):
|
2、在程序中使用:把它稍包装一下,写的类如下
|
本类是对请求request的响应response的缓存。在服务器收到一个请求后首先调用getResponse方法,它在jcs的cache里找,如果尚未缓存则返回null。请求处理器判断返回null后,将请求发送给产生响应的node,然后将响应一方面发送给客户,另一方面调用addCacheItem方法存入缓存。
如果之简单!
PS:之前我尝试自己写了一个cache,结果是0.017秒/请求,使用jcs后速度提升到了0.003秒/请求。应该是我写的cache算法一是替换策略简单(随机替换!之前尝试过使用计数办法模拟的LRU,发现更不行)二是对缓存数据结构加了太多的同步锁(虽然我使用了功能强大的java.util.concurrent.ConcurrentHashMap)。