Java新手使用Cache API最佳方案:报错排查及无需指定端口的缓存选型
报错原因
你遇到的端口连接拒绝报错,是因为项目Classpath下当前默认加载的JCache实现为Hazelcast,该实现默认以集群模式运行,启动时会尝试连接本地的Hazelcast节点服务,你本地未启动对应服务才会抛出该异常。
常见无独立服务的Java缓存方案
Java生态有大量进程内缓存实现,不需要单独部署服务、不需要开放端口,仅作为Jar包引入即可使用,和是否使用Spring没有任何关联,以下是两种最常用的兼容JCache规范的方案:
方案1:使用Caffeine作为JCache实现(性能最优,推荐)
Caffeine是目前Java领域性能表现最好的进程内缓存,完美兼容JCache规范,仅需两步即可适配你的现有代码:
- 在
pom.xml中引入Caffeine的JCache适配依赖,同时删除现有Hazelcast相关的缓存依赖:
<dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine-jcache</artifactId> <version>3.1.8</version> </dependency>
- 你现有编写的JCache代码不需要做任何修改,直接运行即可,Caffeine会被JCache的SPI机制自动识别为实现类,所有缓存数据都存储在当前应用进程的内存中,不会发起任何外部网络连接。
方案2:使用Ehcache单机模式
如果你更倾向使用Ehcache,仅需调整依赖加简单配置即可:
- 在
pom.xml中引入Ehcache核心依赖与JCache规范依赖,删除现有Hazelcast相关依赖:
<dependency> <groupId>org.ehcache</groupId> <artifactId>ehcache</artifactId> <version>3.10.8</version> </dependency> <dependency> <groupId>javax.cache</groupId> <artifactId>cache-api</artifactId> <version>1.1.1</version> </dependency>
- 在项目的
resources目录下新增ehcache.xml配置文件,指定单机缓存规则:
<config xmlns="http://www.ehcache.org/v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.0.xsd"> <cache alias="jCache"> <key-type>java.lang.Long</key-type> <value-type>java.lang.String</value-type> <expiry> <ttl unit="minutes">1</ttl> </expiry> <resources> <!-- 堆内存最多存储1000条缓存 --> <heap unit="entries">1000</heap> </resources> </cache> </config>
调整后你的现有JCache代码即可正常运行,不需要额外启动任何服务。
注意事项
进程内缓存的生命周期和你的应用进程绑定,应用重启后缓存数据会自动清空,完全满足小型项目调用外部API提速的需求。
内容的提问来源于stack exchange,提问作者MacKamski
相关产品推荐
相关产品推荐

