JetCache快速入门指南:高效Java缓存解决方案
什么是JetCache
JetCache是一个基于Java的缓存框架,由阿里巴巴开源,提供了统一的缓存访问API和注解驱动的缓存操作方式。它支持多种缓存后端(如Redis、内存缓存等),并能轻松实现多级缓存架构,是提升Java应用性能的利器。
核心概念
在开始使用JetCache前,需要了解几个核心概念:
- Cache实例:表示一个具体的缓存容器,类似于Map结构
- 方法缓存:通过注解自动缓存方法返回值
- 多级缓存:支持本地缓存+远程缓存的多级结构
- 缓存区域(Area):用于逻辑隔离不同的缓存数据
创建Cache实例
使用@CreateCache
注解可以快速创建Cache实例。下面是一个典型示例:
@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);
方法缓存
JetCache提供了声明式的方法缓存,通过@Cached
注解可以轻松实现方法返回值的缓存:
public interface UserService {
@Cached(name="UserService.getUserById", expire = 3600)
User getUserById(long userId);
}
关键点:
- 注解可以加在接口方法或类方法上
- 所在类必须是Spring管理的Bean
- name属性用于统计信息,建议使用类名+方法名的格式
- expire设置缓存过期时间(秒)
Spring Boot集成配置
对于Spring Boot项目,集成JetCache非常简单:
- 添加依赖:
<dependency>
<groupId>com.alicp.jetcache</groupId>
<artifactId>jetcache-starter-redis</artifactId>
<version>${jetcache.latest.version}</version>
</dependency>
- 配置application.yml:
jetcache:
statIntervalMinutes: 15 # 统计信息输出间隔
areaInCacheName: false # 是否在缓存名中包含area信息
local:
default:
type: linkedhashmap # 本地缓存类型
keyConvertor: fastjson # key转换器
remote:
default:
type: redis # 远程缓存类型
keyConvertor: fastjson2 # key转换器
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 Config方式配置:
- 添加核心依赖:
<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>
- Java配置类:
@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也进行缓存,避免频繁查询数据库
- 缓存雪崩:设置不同的过期时间,避免大量缓存同时失效
- 缓存一致性:使用@CacheUpdate和@CacheInvalidate保持缓存与数据源同步
JetCache通过简洁的API和强大的注解支持,让Java应用的缓存实现变得简单高效。无论是简单的内存缓存还是复杂的分布式缓存场景,JetCache都能提供良好的解决方案。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考