博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
五步教你使用JCS快速搭建缓存环境
阅读量:7051 次
发布时间:2019-06-28

本文共 4199 字,大约阅读时间需要 13 分钟。

JCSJakarta的项目Turbine的子项目。它是一个复合式的缓冲工具。可以将对象缓冲到内存、硬盘。具有缓冲对象时间过期设定。还可以通过JCS构建具有缓冲的分布式构架,以实现高性能的应用。对于一些需要频繁访问而每访问一次都非常消耗资源的对象,可以临时存放在缓冲区中,这样可以提高服务的性能。而JCS正是一个很好的缓冲工具。缓冲工具对于读操作远远多于写操作的应用性能提高非常显著。


一、理解缓存的三个核心概念

Elements : JCS是一个对象缓存,能放置一些对象或是”elements”并通过key来访问它们,很像一个hashtable。可以想象JCS是一个能过Name来获取的hashtables的集合。

Regions : 每一个hashtables都被称做“region”,每一个region都能被独立于其他regions配置。例如,可以有一个称做城市的region,缓存了一些定期被改变的城市对象。可以定义一个region被叫做产品,缓存一些定期改变的产品数据。将可以配置易变的产品的regionelements 过期时间要快于cityregion

Auxiliaries : Auxiliariesregion能用的插件选项。核心的AuxiliariesIndexedDisk CacheTCPLateral CacheRemoteCache Server。例如,磁盘缓存允许当内存达到阈值后把缓存对象交换到硬上。


二、下载JCS

可以从官网下载JCS,可以查看JCS相关的文档。


三、获取JCS依赖的Jar

JCS必备的Jar有两个,分别是jcs-1.3.jarconcurrent.jar,这两个jar都可以从下载。除此之外,我们最好也把Log4j所支持的jar包下载,因为那样方便我们打印一些日志。


四、配置JCS

src目录下创建cache.ccf配置文件,将下面的内容Copy到文件中。

# DEFAULT  CACHE REGION

jcs.default=

jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes

jcs.default.cacheattributes.MaxObjects=1000

jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache

这里需要注意的是,等号“=”之后不要留空格,否则cache.ccf不会识别。


五、开始使用JCS编程

5.1创建CacheWrapper类,使用其添加对象、获取对象和移除对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package 
com.favccxx.favjcs;
import 
org.apache.jcs.JCS;
import 
org.apache.jcs.access.exception.CacheException;
import 
org.apache.jcs.engine.CacheElement;
public 
class 
CacheWrapper {
           
    
public 
JCS jcsCache = 
null
;
           
    
public 
CacheWrapper(JCS cache){
        
this
.jcsCache = cache;
    
}
           
    
public 
void 
put(String key , Object value){
        
try
{
            
jcsCache.put(key, value);
        
}
catch
(CacheException e){
            
e.printStackTrace();
        
}
    
}
           
    
public 
Object get(String key){
        
CacheElement cacheElement = (CacheElement) jcsCache.getCacheElement(key);
        
if 
(
null 
!= cacheElement) {
            
Object object = cacheElement.val;
            
return 
object;
        
}
        
return 
null
;
    
}
           
}

5.2创建CacheFactory类,使用工厂管理缓存对象,用以初始化缓存和清理缓存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package 
com.favccxx.favjcs;
import 
java.util.HashMap;
import 
java.util.Map;
import 
org.apache.jcs.JCS;
import 
org.apache.jcs.access.exception.CacheException;
import 
org.apache.log4j.Logger;
public 
class 
CacheFactory {
         
    
private 
static 
Logger logger = Logger.getLogger(CacheFactory.
class
);
         
    
private 
static 
Map<String, CacheWrapper> hashMapWrapper = 
new 
HashMap<String, CacheWrapper>();
         
    
/**
     
* 获取一个名称为cacheName的缓存对象;如果不存在,返回null
     
* @param cacheName
     
* @return
     
*/
    
public 
static 
CacheWrapper getCacheWrapper(String cacheName){
        
logger.debug(
"Get CacheWrapper, The cacheName is : " 
+ cacheName);
        
return 
hashMapWrapper.get(cacheName);
    
}
         
    
/**
     
* 清理所有的缓存
     
*/
    
public 
static 
void 
clearCache(){
        
Object[] cacheArray = hashMapWrapper.keySet().toArray();
        
for
(
int 
i=
0
, l=cacheArray.length; i<l; i++){
            
try 
{
                
String cacheName = cacheArray[i].toString();
                
logger.debug(
"The cache is below to clear, And the name is : " 
+ cacheName);
                
CacheWrapper cacheWrapper = hashMapWrapper.get(cacheName);
                
cacheWrapper.jcsCache.clear();
            
catch 
(CacheException e) {
                
logger.debug(
"Clear Cache Error!"
);
                
e.printStackTrace();
            
}
        
}
    
}
         
    
/**
     
* 获取一个名称为cacheName的缓存对象;如果不存在,则创建一个新的缓存对象
     
* @param cacheName
     
* @return
     
*/
    
private 
static 
CacheWrapper createCacheWrapper(String cacheName){
        
JCS cache = 
null
;
        
try
{
            
cache = JCS.getInstance(cacheName);
            
return 
new 
CacheWrapper(cache);
        
}
catch
(CacheException e){
            
return 
null
;
        
}
    
}
         
    
/**
     
* 创建缓存对象
     
* @param cacheName
     
*/
    
private 
static 
void 
createHashMapWrapper(String cacheName){
        
hashMapWrapper.put(cacheName, createCacheWrapper(cacheName));
    
}
         
    
/**
     
* 初始化缓存对象
     
*/
    
public 
static 
void 
initCache(){
        
logger.debug(
"By Start initCache Method, We create all the Cache Object"
);
        
createHashMapWrapper(
"coolBoyCache"
);
//      createHashMapWrapper("beautifulGirl");
    
}
}

5.3创建测试类TestCache,测试刚才的缓存对象。

1
2
3
4
5
6
7
8
9
10
11
package 
com.favccxx.favjcs.web;
import 
com.favccxx.favjcs.CacheFactory;
public 
class 
TestCache {
    
/**
     
* @param args
     
*/
    
public 
static 
void 
main(String[] args) {
        
CacheFactory.initCache();
        
CacheFactory.getCacheWrapper(
"coolBoy"
);
    
}
}
本文转自 genuinecx 51CTO博客,原文链接:http://blog.51cto.com/favccxx/1204907,如需转载请自行联系原作者
你可能感兴趣的文章
加密解密
查看>>
企业分布式微服务云SpringCloud SpringBoot mybatis (十四)服务注册(consul)
查看>>
df命令,du命令,磁盘分区
查看>>
JNDI到底是什么
查看>>
JS 学习笔记
查看>>
渣渣菜鸡为什么要看 ElasticSearch 源码?
查看>>
JavaEE的13种核心技术
查看>>
spring mvc +mybatis + KafKa+Flume+Zookeeper分布式架构
查看>>
css3的设置颜色透明度的笔记
查看>>
Selenium WebDriver API 进阶使用,模块化参数化进行自动化测试设计
查看>>
用jQuery打造个性网站
查看>>
JQuery-zTree.js使用范例
查看>>
分布式消息通信ActiveMQ
查看>>
LAMP架构介绍以及MySQL安装
查看>>
android采用MVP漫画APP、适配刘海屏、小黄车主界面、录音波浪动画、综合APP等源码...
查看>>
环境变量PATH, cp和mv命令,文档查看
查看>>
如何开发一个用户脚本系列(1)——什么是用户脚本
查看>>
刨根问底-struts-初始化各种配置加载器
查看>>
java unicode
查看>>
redis-cli 命令
查看>>