Apache Commons JCS 3.2.1 介绍与选型指南
Apache Commons JCS 3.2.1(2024-05-27 发布,Java 8+)本地缓存选型指南:region/auxiliary 模型、cache.ccf 配置、官方示例及与 Caffeine/Ehcache/Redis 的对比。
Apache Commons JCS 3.2.1 介绍与选型指南
目标:本文为认知篇(A1),基于 Apache Commons 官网、官方 Getting Started、Maven Central 与 GitHub 仓库联网溯源编写,关键论断随文标注来源与查询日期(2026-10-18),不做本地安装实测。
一、信息基准
1.1 查询信息说明
- 查询日期:2026-10-18(本文所有版本号、发布日期、社区数据均以该日联网实查为准)
- 版本依据:Apache Commons JCS 官网组件页标注「Last Published: 27 May 2024 / Version: 3.2.1」(来源:commons.apache.org/proper/commons-jcs/,查询日期 2026-10-18);Maven Central 实查
org.apache.commons:commons-jcs3-core最新版本同为 3.2.1,入库时间 2024-05-27(search.maven.org,查询日期 2026-10-18) - Java 基线:官方下载页标题明示「Apache Commons JCS 3.2.1 (Java 8+)」(来源:commons.apache.org/proper/commons-jcs/download_jcs.cgi,查询日期 2026-10-18)
1.2 官方来源清单
| 来源 | 地址 |
|---|---|
| 官网组件首页 | https://commons.apache.org/proper/commons-jcs/ |
| Getting Started | https://commons.apache.org/proper/commons-jcs/getting_started/intro.html |
| 基础配置指南 | https://commons.apache.org/proper/commons-jcs/BasicJCSConfiguration.html |
| 辅助插件清单 | https://commons.apache.org/proper/commons-jcs/JCSPlugins.html |
| 下载页 | https://commons.apache.org/proper/commons-jcs/download_jcs.cgi |
| 升级指南(2.x→3.0) | https://commons.apache.org/proper/commons-jcs/UpgradingFrom2x.html |
| Core Javadoc | https://commons.apache.org/proper/commons-jcs/commons-jcs3-core/apidocs/index.html |
| GitHub 仓库 | https://github.com/apache/commons-jcs |
| Maven Central | artifact:org.apache.commons:commons-jcs3-core |
1.3 版本基准表
| 项目 | 值 | 来源 |
|---|---|---|
| 本次介绍版本 | 3.2.1 | 官网组件页,2026-10-18 实查 |
| 发布日期 | 2024-05-27 | 官网组件页 / Maven Central 入库时间 |
| Java 要求 | Java 8+ | 官方下载页标题 |
| 许可证 | Apache License 2.0 | ASF 组件默认许可 |
| 核心依赖 | 自 2.0 起核心(LRU 内存缓存、索引磁盘缓存、TCP Lateral、RMI 远程服务)仅需 commons-logging | 官方 Getting Started「STEP 3」节 |
| 发版状态 | 3.2.1(2024-05-27)后暂无新版本,属低频发版组件 | Maven Central,2026-10-18 实查 |
二、软件概述
Apache Commons JCS 3.2.1(2024-05-27 发布,Apache License 2.0)是 Apache Software Foundation 旗下的 Java 分布式/复合缓存系统(Java Caching System),定位为面向 JVM 应用的进程内对象缓存框架。官方 Getting Started 概述其心智模型为:「JCS 是一个对象缓存,把对象(元素,element)以键值方式放入,形似 hashtable;可以把它想象成一组按名字引用的 map,每个 map 称为一个区域(region),各区域可独立配置」(来源:commons.apache.org/proper/commons-jcs/getting_started/intro.html,查询日期 2026-10-18)。
JCS 的差异化能力在于多级复合缓存:内存(LRU)之上可叠加索引磁盘缓存(内存阈值达限后溢写到磁盘)、TCP Lateral 横向缓存(同组节点间失效同步)与 Remote Cache Server(RMI 远程缓存服务),并提供 JCache(JSR 107)适配模块(官网模块清单「Apache Commons JCS :: JCache」,查询日期 2026-10-18)。相比现代内存缓存库,它更偏「传统重型多级缓存」路线,适合需要磁盘溢写与节点间同步的存量 JVM 应用。
三、核心架构
3.1 三大核心概念(官方 Getting Started 原文意译)
- Element(元素):放入缓存的对象,必须可序列化(跨辅助层传输需要)。
- Region(区域):按名字引用的独立缓存空间(如 Cities、Products),各自配置容量、过期、内存管理器与辅助插件;未显式定义的区域使用默认配置。
- Auxiliary(辅助):区域可选挂载的插件,类比 log4j 的 appender。核心辅助包括:
- Indexed Disk Cache:内存阈值达限后把元素换出到磁盘索引文件;
- TCP Lateral Cache:同组 JVM 节点间的缓存数据/失效横向传播;
- Remote Cache Server:以独立 RMI 服务集中管理缓存同步。
3.2 配置体系
- 配置文件为类路径下的
cache.ccf(属性文件格式),由**默认区(default)、区域区(regions)、辅助区(auxiliaries)**三部分组成;区域不继承默认区的辅助配置(官方 Getting Started「STEP 4」原文意译)。 - 缓存属性(
CompositeCacheAttributes)控制 MaxObjects、内存管理器(如 LRUMemoryCache)、内存收缩器(UseMemoryShrinker/MaxMemoryIdleTimeSeconds/ShrinkerIntervalSeconds)等;元素属性(ElementAttributes)控制 IsEternal、MaxLife、IdleTime、IsSpool/IsRemote/IsLateral 等。
3.3 模块组成
官网模块页列出核心与扩展模块(来源:官网 index「Modules」清单,查询日期 2026-10-18):commons-jcs3-core(核心)、commons-jcs3-jcache(JCache/JSR 107 适配)等;核心内部包含 LRU 内存缓存、索引磁盘缓存、TCP Lateral、RMI 远程组件(官方 Getting Started「STEP 3」节)。
四、功能特性
依据官方 Getting Started 与插件页(查询日期 2026-10-18):
- 多级复合缓存:内存 LRU + 磁盘溢写 + 横向/远程分发,可按区域自由组合。
- 按区域独立配置:容量、TTL/Idle 过期、内存收缩间隔等逐区域调优。
- 内存收缩器:后台按间隔清理空闲元素(UseMemoryShrinker)。
- 磁盘持久缓存:Indexed Disk Cache 支持大容量磁盘换出、按参数优化移除(OptimizeAtRemoveCount)与键容量上限。
- 分布式形态:TCP Lateral 与 Remote Cache Server 提供节点间数据同步(传统 RMI/TCP 机制)。
- JCache 适配:提供 JSR 107(JCache)实现模块,便于标准化接入。
- 轻依赖:核心仅依赖 commons-logging(2.0 起,官方 Getting Started)。
五、快速上手
以下配置与代码均引自官方 Getting Started 页原文(来源:commons.apache.org/proper/commons-jcs/getting_started/intro.html,查询日期 2026-10-18)。
5.1 Maven 依赖
坐标 org.apache.commons:commons-jcs3-core:3.2.1(来源:Maven Central 实查,查询日期 2026-10-18):
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-jcs3-core</artifactId>
<version>3.2.1</version>
</dependency>
5.2 cache.ccf 配置(官方原文示例)
官方示例定义一个使用索引磁盘缓存(DC)的区域 testCache1,内存管理器为 LRU:
# DEFAULT CACHE REGION
jcs.default=DC
jcs.default.cacheattributes=org.apache.commons.jcs3.engine.CompositeCacheAttributes
jcs.default.cacheattributes.MaxObjects=1000
jcs.default.cacheattributes.MemoryCacheName=org.apache.commons.jcs3.engine.memory.lru.LRUMemoryCache
jcs.default.cacheattributes.UseMemoryShrinker=false
jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds=3600
jcs.default.cacheattributes.ShrinkerIntervalSeconds=60
jcs.default.elementattributes=org.apache.commons.jcs3.engine.ElementAttributes
jcs.default.elementattributes.IsEternal=false
jcs.default.elementattributes.MaxLife=21600
jcs.default.elementattributes.IdleTime=1800
jcs.default.elementattributes.IsSpool=true
jcs.default.elementattributes.IsRemote=true
jcs.default.elementattributes.IsLateral=true
# PRE-DEFINED CACHE REGIONS
jcs.region.testCache1=DC
jcs.region.testCache1.cacheattributes=org.apache.commons.jcs3.engine.CompositeCacheAttributes
jcs.region.testCache1.cacheattributes.MaxObjects=1000
jcs.region.testCache1.cacheattributes.MemoryCacheName=org.apache.commons.jcs3.engine.memory.lru.LRUMemoryCache
jcs.region.testCache1.cacheattributes.UseMemoryShrinker=false
jcs.region.testCache1.cacheattributes.MaxMemoryIdleTimeSeconds=3600
jcs.region.testCache1.cacheattributes.ShrinkerIntervalSeconds=60
jcs.region.testCache1.cacheattributes.MaxSpoolPerRun=500
jcs.region.testCache1.elementattributes=org.apache.commons.jcs3.engine.ElementAttributes
jcs.region.testCache1.elementattributes.IsEternal=false
# AVAILABLE AUXILIARY CACHES
jcs.auxiliary.DC=org.apache.commons.jcs3.auxiliary.disk.indexed.IndexedDiskCacheFactory
jcs.auxiliary.DC.attributes=org.apache.commons.jcs3.auxiliary.disk.indexed.IndexedDiskCacheAttributes
jcs.auxiliary.DC.attributes.DiskPath=${user.dir}/jcs_swap
jcs.auxiliary.DC.attributes.MaxPurgatorySize=10000000
jcs.auxiliary.DC.attributes.MaxKeySize=1000000
jcs.auxiliary.DC.attributes.OptimizeAtRemoveCount=300000
jcs.auxiliary.DC.attributes.ShutdownSpoolTimeLimit=60
5.3 编程接口(官方原文示例,节选)
import java.io.Serializable;
import org.apache.commons.jcs3.JCS;
import org.apache.commons.jcs3.access.CacheAccess;
import org.apache.commons.jcs3.access.exception.CacheException;
public class JcsExample {
private CacheAccess<String, City> cache = null;
public JcsExample() {
try {
cache = JCS.getInstance( "default" );
} catch ( CacheException e ) {
System.out.println( String.format( "Problem initializing cache: %s", e.getMessage() ) );
}
}
public void putInCache( City city ) {
String key = city.name;
try {
cache.put( key, city );
} catch ( CacheException e ) {
// handle
}
}
public City retrieveFromCache( String cityKey ) {
return cache.get( cityKey );
}
public class City implements Serializable {
private static final long serialVersionUID = 6392376146163510146L;
public String name;
public String country;
public int population;
public City( String name, String country, int population ) {
this.name = name;
this.country = country;
this.population = population;
}
}
}
官方完整示例还演示了按名字取区域、put/get 与未命中判断(完整源码见 Getting Started「STEP 5」节)。本文未做本地运行实测。
六、适用场景与限制
6.1 适用场景
- 需要内存 + 磁盘二级缓存的 JVM 应用(缓存体量超过堆内存,允许磁盘换出)。
- 存量系统需要在不引入中间件的前提下获得多节点缓存同步(TCP Lateral / Remote Cache Server)。
- 需要按业务域分区精细化配置(不同 region 不同 TTL/容量/溢写策略)。
- 需要符合 JSR 107(JCache)标准接口的场景(jcache 模块)。
6.2 限制与注意
- 发版低频:3.2.1(2024-05-27)后暂无新版本,社区规模中等(GitHub 108 stars,2026-10-18 实查)。
- 分布式形态传统:Lateral/Remote 基于 RMI/TCP 的老式机制,与云原生服务发现体系整合需自行适配。
- 元素须可序列化:跨辅助层(磁盘/远程)传输要求 Serializable。
- 配置风格陈旧:cache.ccf 属性文件机制相对现代编程式/注解式配置繁琐。
- 本地缓存竞争者强:纯内存高性能场景,Caffeine 在吞吐与 W-TinyLFU 淘汰算法上通常更优。
七、同类选型对比
对比对象:Caffeine、Ehcache 3、Redis(以本地缓存视角对照)。社区数据均为 2026-10-18 联网实查(GitHub API / 官方发布页)。
| 维度 | Commons JCS 3.2.1 | Caffeine 3.3.1 | Ehcache 3.11.1 | Redis(进程外对照) |
|---|---|---|---|---|
| 许可证 | Apache-2.0 | Apache-2.0 | Apache-2.0 | 服务端软件,许可随版本(RSALv2/SSPLv1/AGPLv3) |
| GitHub stars | 108(apache/commons-jcs) | 17,892(ben-manes/caffeine) | 2,089(ehcache/ehcache3) | 不适用(独立服务) |
| 最近发版 | 3.2.1(2024-05-27,Maven Central 实查) | v3.3.1(2026-10-13,GitHub Releases) | v3.11.1(2025-08-29,GitHub Releases) | 高频发版 |
| 版本节奏 | 低频(3.x 线两年余无新版) | 活跃(年内多版) | 中频 | 极高 |
| 兼容矩阵 | Java 8+(官方下载页) | Java 8+(3.x 线) | Java 8+(3.x 线) | 语言无关协议 |
| 能力侧重 | 内存+磁盘+横向/远程多级复合缓存 | 进程内高性能缓存(W-TinyLFU、异步加载) | 进程内+磁盘存储、JSR 107 完整实现、多级 | 独立缓存服务(跨语言、持久化、丰富数据结构) |
| 部署形态 | 嵌入 JVM 库 | 嵌入 JVM 库 | 嵌入 JVM 库 | 独立进程 |
选型建议:纯进程内高速缓存首选 Caffeine(活跃度与性能最优);需要磁盘溢写或 JSR 107 标准化时选 Ehcache 3,能力更完整且发版更近;JCS 适合已有 JCS 存量或明确需要「LRU+磁盘+Lateral/Remote」传统多级组合的场景;需要跨语言共享、独立扩缩容的缓存层则选 Redis 等进程外缓存服务(注意其独立部署与许可属性)。
八、参考链接
- Apache Commons JCS 官网:https://commons.apache.org/proper/commons-jcs/
- Getting Started:https://commons.apache.org/proper/commons-jcs/getting_started/intro.html
- Basic JCS Configuration:https://commons.apache.org/proper/commons-jcs/BasicJCSConfiguration.html
- JCS Plugins(辅助插件):https://commons.apache.org/proper/commons-jcs/JCSPlugins.html
- 下载页:https://commons.apache.org/proper/commons-jcs/download_jcs.cgi
- Core Javadoc:https://commons.apache.org/proper/commons-jcs/commons-jcs3-core/apidocs/index.html
- GitHub 仓库:https://github.com/apache/commons-jcs
- Caffeine 仓库:https://github.com/ben-manes/caffeine
- Ehcache 3 仓库:https://github.com/ehcache/ehcache3