jcs开源缓存框架介绍
这篇文章写的通俗易懂,转自http://blog.csdn.net/zyujie/article/details/7369463,以作学习。
JCS是Jakarta的项目Turbine的子项目。它是一个复合式的缓冲工具。可以将对象缓冲到内存、硬盘。具有缓冲对象时间过期设定。还可以通过JCS构建具有缓冲的分布式构架,以实现高性能的应用。对于一些需要频繁访问而每访问一次都非常消耗资源的对象,可以临时存放在缓冲区中,这样可以提高服务的性能。而JCS正是一个很好的缓冲工具。缓冲工具对于读操作远远多于写操作的应用性能提高非常显著。
JCS除了简单的将对象缓冲在内存中以外,还具有几个特性,以适应企业级缓冲系统的需要。这些特性包括时间过期、索引式硬盘缓冲、并行式的分布缓冲等。
内存缓冲
JCS现在支持两种内存缓冲算法LRU和MRU。通常都是使用LRU算法。
org.apache.stratum.jcs.engine.memory.lru.LRUMemoryCache
使用内存缓冲区需要定义缓冲区大小,当超过缓冲区限制时,会将缓冲内容抛弃掉。如果有配硬盘缓冲,则将挤出来的缓冲内容写入硬盘缓冲区。
时间过期
JCS对于缓冲的对象,可以设定缓冲过期时间,一个对象在缓冲区中停留的时间超过这个时间,就会被认为是“不新鲜”而被放弃。
索引式硬盘缓冲
并行式的分布缓冲(Lateral)
Client/Server式的缓冲(Remote)
配置方法
内存缓冲
- #WEB-INF/classes/cache.ccf(以下内容不要换行)
- 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
上面配置了默认缓冲属性。一个应用中,由于对象类型的不同,可能会使用多个缓冲区,每个缓冲区都会有一个名字,如果在配置文件中没有指明特定的缓冲区的属性,所有的缓冲区都会根据默认属性来构建。上面的内容,指明缓冲区的大小为存放1000个对象,内存缓冲器使用LRUMemoryCache对象。可选的还有MRUMemoryCache,应该可以自定义新的内存缓冲区。1000个缓冲对象这个容量,是指每个缓冲区都缓冲1000个,而不是指所有缓冲区总容量。以上配置,就可以让应用运行起来。
时间过期
jcs.default.cacheattributes.cacheattributes.UseMemoryShrinker=true
jcs.default.cacheattributes.cacheattributes.MaxMemoryIdleTimeSeconds=3600
jcs.default.cacheattributes.cacheattributes.ShrinkerIntervalSeconds=60
索引式硬盘缓冲
- #定义一个硬盘缓冲区产生器(Factory),取名为DC
- jcs.auxiliary.DC=org.apache.stratum.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory
- jcs.auxiliary.DC.attributes=org.apache.stratum.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes
- jcs.auxiliary.DC.attributes.DiskPath=g:/dev/jakarta-turbine-stratum/raf
- #这里其实就是指明了缓冲文件存放到那里去。
- #然后,做以下修改
- jcs.default=DC
- #这样,所有未特别指定属性的缓冲区都会自己使用一个硬盘缓冲区,缓冲文件会以缓冲区的名字来命名。存放在指定的目录下。
- #横向式的并行缓冲
- #并行式的配置如下
- jcs.auxiliary.LTCP=org.apache.jcs.auxiliary.lateral.LateralCacheFactory
- jcs.auxiliary.LTCP.attributes=org.apache.jcs.auxiliary.lateral.LateralCacheAttributes
- jcs.auxiliary.LTCP.attributes.TransmissionTypeName=TCP
- jcs.auxiliary.LTCP.attributes.TcpServers=192.168.10.129:1121,192.168.10.222:1121
- jcs.auxiliary.LTCP.attributes.TcpListenerPort=1121
- jcs.auxiliary.LTCP.attributes.PutOnlyMode=false
这里的配置是在41,129,221三台机器上实现并行缓冲的。
大家都在1121端口上监听,同时与另外两台机器连接。如果连接失败,就会等待一个时间后再连接一次,直到连接成功为止。三台机器中任意一台的缓冲区发生更新,比如put和remove动作,就会把更新传递给另外两台。
单独指明某个缓冲区的属性
如果,针对某个缓冲区,比如叫做TestCache1,需要单独配置属性,可以如下配置。
- jcs.region.testCache1=DC,LTCP
- jcs.region.testCache1.cacheattributes=org.apache.stratum.jcs.engine.CompositeCacheAttributes
- jcs.region.testCache1.cacheattributes.MaxObjects=1000
- jcs.region.testCache1.cacheattributes.MemoryCacheName=org.apache.stratum.jcs.engine.memory.lru.LRUMemoryCache
- jcs.region.testCache1.cacheattributes.UseMemoryShrinker=true
- jcs.region.testCache1.cacheattributes.MaxMemoryIdleTimeSeconds=3600
- jcs.region.testCache1.cacheattributes.ShrinkerIntervalSeconds=60
- system.GroupIdCache
- #这个概念我也不是很清楚。不过JCS文档中指出配置以下内容会比较好。
- jcs.system.groupIdCache=DC
- jcs.system.groupIdCache.cacheattributes=org.apache.stratum.jcs.engine.CompositeCacheAttributes
- jcs.system.groupIdCache.cacheattributes.MaxObjects=10000
- jcs.system.groupIdCache.cacheattributes.MemoryCacheName=org.apache.stratum.jcs.engine.memory.lru.LRUMemoryCache
- #这可能是JCS自己的组管理体系上的缓冲区。
Client/Server式的缓冲(Remote)
这种构架需要单独配置客户端和服务端,如果要研究,可以查看 http://jakarta.apache.org/turbine/jcs/RemoteAuxCache.html
- # DEFAULT CACHE REGION
- # sets the default aux value for any non configured caches
- jcs.default=DC
- jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
- jcs.default.cacheattributes.MaxObjects=1
- jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
- jcs.default.elementattributes.IsEternal=true
- jcs.default.elementattributes.MaxLifeSeconds=360000
- jcs.default.elementattributes.IdleTime=1800
- jcs.default.elementattributes.IsSpool=true
- jcs.default.elementattributes.IsRemote=true
- jcs.default.elementattributes.IsLateral=true
- # CACHE REGIONS AVAILABLE
- # AUXILIARY CACHES AVAILABLE
- # Primary Disk Cache -- faster than the rest because of memory key storage
- 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=./kpicache
- jcs.auxiliary.DC.attributes.MaxPurgatorySize=100000000
- jcs.auxiliary.DC.attributes.MaxKeySize=10000000
- jcs.auxiliary.DC.attributes.OptimizeAtRemoveCount=300000
- jcs.auxiliary.DC.attributes.MaxRecycleBinSize=7500
一些方法的操作:
- package com.zyujie.util;
- import org.apache.jcs.JCS;
- public class JCSManagerDTO {
- private static JCSManagerDTO instance;
- private static int checkedOut = 0;
- public static JCS ObjCache;
- private JCSManagerDTO() {
- try {
- ObjCache = JCS.getInstance("ObjCache");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public static JCSManagerDTO getInstance() {
- synchronized (JCSManagerDTO.class) {
- if (instance == null) {
- instance = new JCSManagerDTO();
- }
- }
- synchronized (instance) {
- instance.checkedOut++;
- }
- return instance;
- }
- public Object getObj(Object key) {
- Object obj = null;
- obj = (Object) ObjCache.get(key);
- return obj;
- }
- public void storeObject(Object key, Object obj) {
- try {
- if (!key.equals("")) {
- // ObjCache.remove(key);
- }
- ObjCache.put(key, obj);
- } catch (Exception e) {
- }
- }
- public void clearObject(Object key) {
- try {
- ObjCache.remove(key);
- } catch (Exception e) {
- }
- }
- public void clear() {
- try {
- ObjCache.clear();
- } catch (Exception e) {
- }
- }
- public void clearMatchObject(String key) {
- // CacheAccess access1=CacheAccess.getAccess("DC");
- // java.util.Map map=access1.get.getMatchingCacheElements(key);
- }
- public static void main(String[] args) {
- JCSManagerDTO dto = JCSManagerDTO.getInstance();
- dto.storeObject("test1", "111");
- dto.storeObject("test2", "222");
- dto.storeObject("test3", "333");
- dto.storeObject("test4", "444");
- System.out.println("test1 is " + dto.getObj("test1"));
- System.out.println("test2 is " + dto.getObj("test2"));
- System.out.println("test3 is " + dto.getObj("test3"));
- System.out.println("test4 is " + dto.getObj("test4"));
- }
- }
依赖jar包
jcs-1.3.jar
commons-lang-2.3.jar
commons-collections-2.1.1.jar
concurrent-1.3.4.jar
jcs开源缓存框架介绍相关推荐
- ACache【轻量级的开源缓存框架】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 官方介绍 ASimpleCache 是一个为android制定的 轻量级的 开源缓存框架.轻量到只有一个java文件(由十几个类精简 ...
- ASimpleCache开源缓存框架使用之实现抽签小程序
使用ASimpleCache开源缓存框架实现抽签小程序 最近在考虑数据缓存的时候发现了这个ASimpleCache,简单到只需要拷贝一个Java文件,正好最近团队有个活动需要抽签,我就做了一个抽签的小 ...
- java 开源缓存框架--转载
原文地址:http://www.open-open.com/13.htm JBossCache/TreeCache JBossCache是一个复制的事务处理缓存,它允许你缓存企业级应用数据来更好的改 ...
- 阿里开源 JetCache 缓存框架介绍使用
一.JetCache JetCache是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用. JetCache提供了比SpringCache更加强大的注解,可以原生的支持TTL.两 ...
- java预研项目_缓存java框架技术预研3:JAVA缓存技术介绍
几个著名Java开源缓存框架介绍(OSCache,JSC) OSCache是个一个广泛采用的高性能的缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案. OSCache有以下特点: ...
- GitHub开源游戏框架和引擎介绍
GitHub开源游戏框架介绍 ET ET的介绍 GitHub地址 NoahGameFrame NoahGameFrame的介绍 GitHub地址 CSDN相关教程 ET ET的介绍 ET是一个开源的游 ...
- android 轻量级缓存框架ASimpleCache
http://www.codeceo.com/article/asimplecache-android-cache.html ASimpleCache可以缓存哪些东西 ASimpleCache基本可以 ...
- 三大缓存框架ehcache、memcache和redis的介绍
三大缓存框架ehcache.memcache和redis的介绍 2016-04-12 架构说 4964 阅读 最近项目组有用到这三个缓存,去各自的官方看了下,觉得还真的各有千秋!今天特意归纳下各个缓存 ...
- EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是hibernate中默认的CacheProvider Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通
EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是hibernate中默认的CacheProvider Ehcache是一种广泛使用的开源Java分布式缓存.主要面向通用缓存, ...
最新文章
- 参会指南 |「MEET 2021智能未来大会」明天启幕!
- Linux中look命令,如何在Linux上使用look命令 | MOS86
- 另一个程序正在使用此文件 进程无法访问 iis
- 左神桶排序和基数排序
- ECCV18 Oral | CornerNet目标检测开启预测“边界框”到预测“点对”的新思路
- linux系统防火墙配置浅谈
- Python logging模块实现同时向控制台和文件打印日志
- SpringBoot+SpringMVC+MybatisPlus框架整合实现分页插件查询
- 90后华人教授夫妇斩获IEEE the best 论文和ACM Demo冠军,团队1年连发4篇Nature子刊
- 《高等代数学》(姚慕生),复习题一,第1题
- python识别图片上的文字_Python程序图片和pdf上文字识别实例
- 实现加入购物车的功能
- jQuery 案例-图片抽奖
- “pip-script.py”is not present的问题
- 什么是软路由和硬路由,两者的区别有什么?
- 2017河南工业大学玲珑杯赛后总结
- 解决python ping测试
- 神经网络模型的模型假设,神经网络模型预测控制
- 安卓Android校园综合服务系统校园帮app
- AdGuard添加规则方法
热门文章
- 苹果手机怎么解屏幕锁_手机屏幕密码忘了怎么办?这个方法轻松解除手机屏幕密码...
- arm服务器性能监控工具,linux服务器jvm内存监控工具
- python subprocess参数shell=True踩到的坑
- 一个计算机高手的成长(转载)
- 小飞鱼通达OA二开 使用微信企业号做一个用户自助重设密码的开发(图文)
- 【编程】DCF自由现金流贴现模型——基于python的实现
- 大写字母的读法(大写字母的读音)
- RecyclerView侧边添加字母排序
- 厉害了,Python竟然也可以制作萌萌的手绘图表
- python字符串/列表/集合/字典/元组应用