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 JCSApache Commons JCS2026/10/18

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 Startedhttps://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 Javadochttps://commons.apache.org/proper/commons-jcs/commons-jcs3-core/apidocs/index.html
GitHub 仓库https://github.com/apache/commons-jcs
Maven Centralartifact: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.0ASF 组件默认许可
核心依赖自 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):

  1. 多级复合缓存:内存 LRU + 磁盘溢写 + 横向/远程分发,可按区域自由组合。
  2. 按区域独立配置:容量、TTL/Idle 过期、内存收缩间隔等逐区域调优。
  3. 内存收缩器:后台按间隔清理空闲元素(UseMemoryShrinker)。
  4. 磁盘持久缓存:Indexed Disk Cache 支持大容量磁盘换出、按参数优化移除(OptimizeAtRemoveCount)与键容量上限。
  5. 分布式形态:TCP Lateral 与 Remote Cache Server 提供节点间数据同步(传统 RMI/TCP 机制)。
  6. JCache 适配:提供 JSR 107(JCache)实现模块,便于标准化接入。
  7. 轻依赖:核心仅依赖 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.1Caffeine 3.3.1Ehcache 3.11.1Redis(进程外对照)
许可证Apache-2.0Apache-2.0Apache-2.0服务端软件,许可随版本(RSALv2/SSPLv1/AGPLv3)
GitHub stars108(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 等进程外缓存服务(注意其独立部署与许可属性)。

八、参考链接

  1. Apache Commons JCS 官网:https://commons.apache.org/proper/commons-jcs/
  2. Getting Started:https://commons.apache.org/proper/commons-jcs/getting_started/intro.html
  3. Basic JCS Configuration:https://commons.apache.org/proper/commons-jcs/BasicJCSConfiguration.html
  4. JCS Plugins(辅助插件):https://commons.apache.org/proper/commons-jcs/JCSPlugins.html
  5. 下载页:https://commons.apache.org/proper/commons-jcs/download_jcs.cgi
  6. Core Javadoc:https://commons.apache.org/proper/commons-jcs/commons-jcs3-core/apidocs/index.html
  7. GitHub 仓库:https://github.com/apache/commons-jcs
  8. Caffeine 仓库:https://github.com/ben-manes/caffeine
  9. Ehcache 3 仓库:https://github.com/ehcache/ehcache3