JCache 缓存存储模式深度解析
JSR-107 规范在定义缓存接口时,采用了务实的分层设计哲学。它明确界定了两种主要的缓存存储模式(拓扑),这直接决定了数据如何分布、一致性及容错能力。
核心拓扑模式:LOCAL 与分布式扩展
LOCAL 拓扑:标准强制实现
LOCAL 拓扑是 JCache 规范唯一强制要求所有实现必须支持的基础模式。它代表单 JVM 进程内的缓存存储,不依赖外部网络或集群协调。
核心特征
public class LocalCacheCharacteristics {
// 数据存储在单个 JVM 堆内存中
private final Map<K, V> store = new ConcurrentHashMap<>();
// 无网络通信开销,纯粹的内存操作
public V get(K key) {
return store.get(key);
}
// 强一致性保证(单 JVM 内线程可见性)
public void put(K key, V value) {
store.put(key, value);
}
// 故障边界明确,数据随 JVM 生命周期存在
public void clear() {
store.clear();
}
}
设计哲学意义:
- 最低可行性保证:确保任何 JCache 实现至少能提供本地缓存功能,降低接入门槛。
- 开发友好性:简化初期开发和测试,无需配置复杂的分布式基础设施。
- 渐进式采用:允许应用从简单单机开始,随业务增长平滑升级至分布式架构。
PARTITIONED/REPLICATED:可选分布式扩展
这两种拓扑作为规范的可选扩展点,允许厂商实现分布式缓存能力。它们通常通过厂商特定的配置 API 开启。
// 分布式拓扑的配置通常通过厂商扩展 API
public class DistributedCacheSetup {
// PARTITIONED 配置示例(如 Hazelcast)
public void configurePartitioned {
();
config.getCacheConfig()
.setBackupCount()
.setPartitionStrategy(PartitionStrategy.HASH);
}
{
();
builder.clustering().cacheMode(CacheMode.REPL_SYNC);
}
}


