JetCache快速入门指南:阿里巴巴高性能Java缓存框架
什么是JetCache
JetCache是阿里巴巴开源的一个Java缓存框架,它提供了统一的API和注解来简化缓存的使用。JetCache支持多种缓存类型,包括本地缓存、远程缓存以及多级缓存组合,能够显著提升应用性能。
核心特性
- 注解驱动的缓存操作
- 支持本地缓存和远程缓存
- 多级缓存支持
- 自动刷新和缓存失效机制
- 丰富的监控统计功能
快速开始
1. 创建缓存实例
在JetCache中,可以通过@CreateCache注解创建缓存实例。以下是一个典型示例:
@Autowired
private CacheManager cacheManager;
private Cache<Long, UserDO> userCache;
@PostConstruct
public void init() {
QuickConfig qc = QuickConfig.newBuilder("userCache") // 缓存名称,用于统计信息
.expire(Duration.ofSeconds(100)) // 设置缓存过期时间
//.cacheType(CacheType.BOTH) // 可选:创建两级缓存
//.localLimit(100) // 可选:本地缓存元素个数限制
//.syncLocal(true) // 可选:在多级缓存情况下同步更新其他JVM实例
.build();
userCache = cacheManager.getOrCreateCache(qc);
}
创建后的缓存使用方式类似于Map:
// 获取缓存
UserDO user = userCache.get(123L);
// 存入缓存
userCache.put(123L, user);
// 移除缓存
userCache.remove(123L);
2. 方法缓存
JetCache支持通过@Cached注解为方法添加缓存功能,这是通过Spring AOP实现的:
public interface UserService {
@Cached(name="UserService.getUserById", expire = 3600)
User getUserById(long userId);
}
注意:
- 注解可以加在接口方法或类方法上
- 被注解的方法必须属于Spring管理的Bean
配置指南
Spring Boot配置
对于Spring Boot项目,推荐使用starter方式集成:
- 添加依赖:
<dependency>
<groupId>com.alicp.jetcache</groupId>
<artifactId>jetcache-starter-redis</artifactId>
<version>${jetcache.latest.version}</version>
</dependency>
- 配置application.yml:
jetcache:
statIntervalMinutes: 15 # 统计信息输出间隔
areaInCacheName: false # 是否在缓存名称中包含区域信息
local:
default:
type: linkedhashmap # 本地缓存类型
keyConvertor: fastjson # 键转换器
remote:
default:
type: redis # 远程缓存类型
keyConvertor: fastjson2 # 键转换器
broadcastChannel: projectA # 广播通道名称
valueEncoder: java # 值编码器
valueDecoder: java # 值解码器
poolConfig:
minIdle: 5 # 连接池最小空闲连接数
maxIdle: 20 # 连接池最大空闲连接数
maxTotal: 50 # 连接池最大连接数
host: 127.0.0.1 # Redis主机地址
port: 6379 # Redis端口
- 创建启动类:
@SpringBootApplication
@EnableMethodCache(basePackages = "com.company.mypackage")
@EnableCreateCacheAnnotation
public class MySpringBootApp {
public static void main(String[] args) {
SpringApplication.run(MySpringBootApp.class);
}
}
非Spring Boot配置
对于非Spring Boot项目,可以通过Java配置类方式集成:
- 添加依赖:
<dependency>
<groupId>com.alicp.jetcache</groupId>
<artifactId>jetcache-anno</artifactId>
<version>${jetcache.latest.version}</version>
</dependency>
<dependency>
<groupId>com.alicp.jetcache</groupId>
<artifactId>jetcache-redis</artifactId>
<version>${jetcache.latest.version}</version>
</dependency>
- 创建配置类:
@Configuration
@EnableMethodCache(basePackages = "com.company.mypackage")
@EnableCreateCacheAnnotation
@Import(JetCacheBaseBeans.class)
public class JetCacheConfig {
@Bean
public Pool<Jedis> pool(){
GenericObjectPoolConfig pc = new GenericObjectPoolConfig();
pc.setMinIdle(2);
pc.setMaxIdle(10);
pc.setMaxTotal(10);
return new JedisPool(pc, "localhost", 6379);
}
@Bean
public GlobalCacheConfig config(Pool<Jedis> pool){
Map localBuilders = new HashMap();
EmbeddedCacheBuilder localBuilder = LinkedHashMapCacheBuilder
.createLinkedHashMapCacheBuilder()
.keyConvertor(FastjsonKeyConvertor.INSTANCE);
localBuilders.put(CacheConsts.DEFAULT_AREA, localBuilder);
Map remoteBuilders = new HashMap();
RedisCacheBuilder remoteCacheBuilder = RedisCacheBuilder.createRedisCacheBuilder()
.keyConvertor(Fastjson2KeyConvertor.INSTANCE)
.valueEncoder(JavaValueEncoder.INSTANCE)
.valueDecoder(JavaValueDecoder.INSTANCE)
.broadcastChannel("projectA")
.jedisPool(pool);
remoteBuilders.put(CacheConsts.DEFAULT_AREA, remoteCacheBuilder);
GlobalCacheConfig globalCacheConfig = new GlobalCacheConfig();
globalCacheConfig.setLocalCacheBuilders(localBuilders);
globalCacheConfig.setRemoteCacheBuilders(remoteBuilders);
globalCacheConfig.setStatIntervalMinutes(15);
globalCacheConfig.setAreaInCacheName(false);
return globalCacheConfig;
}
}
最佳实践
- 缓存命名规范:为缓存和方法缓存使用有意义的名称,便于监控和排查问题
- 合理设置过期时间:根据业务特点设置不同的过期时间
- 多级缓存:对于热点数据,考虑使用LOCAL+BOTH类型的多级缓存
- 监控统计:利用内置的统计功能定期分析缓存命中率
常见问题
- 缓存穿透:对于不存在的key,可以考虑使用空对象缓存
- 缓存雪崩:为不同的key设置随机的过期时间
- 缓存一致性:在多级缓存情况下,确保syncLocal配置正确
JetCache通过简洁的API和强大的功能,为Java应用提供了高效的缓存解决方案。无论是简单的本地缓存还是复杂的分布式缓存场景,JetCache都能提供良好的支持。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



