
一、JetCache的基本概念
JetCache 是阿里巴巴开源的一款基于 Spring 的缓存框架,支持包括 Redis 在内的多种存储后端。它的核心设计目标是简化缓存的使用,同时提供高性能与灵活的配置。
主要特点
- 基于注解:通过
@Cached、@CacheUpdate 等注解声明式地配置和使用缓存,极大简化了代码,提升了可维护性。
- 多级缓存:支持将数据同时缓存在本地内存(如 Caffeine)和远程缓存(如 Redis、Tair、Memcached)中,形成多级缓存架构,有效提高缓存命中率和查询效率。
- 多存储支持:适配多种缓存协议,具有良好的可扩展性,允许开发者根据业务场景灵活选择或切换缓存存储方式。
- 高性能优化:针对分布式环境下的高并发访问场景,对缓存数据结构和查询算法进行了优化。
- 易于集成:提供了与 Spring 及 Spring Boot 深度集成的支持,通过简单的配置即可投入使用。
适用场景
- 热点数据缓存:将频繁访问的数据缓存在靠近应用层的位置,显著降低数据库压力,提升响应速度与系统稳定性。
- 多级缓存融合:利用本地缓存的高速度和远程缓存的大容量、可共享特性,构建高效的混合缓存模式。
- 高并发读写:其缓存机制能够有效应对高并发场景,减轻系统负载,平滑流量峰值。
- 高速查询加速:对于复杂或耗时的查询操作,通过缓存结果实现毫秒级响应,优化用户体验。
二、JetCache 的核心 API 与功能
- 缓存管理:通过
CacheBuilder 创建缓存实例,使用 Cache 接口提供的 get、put、remove 等方法进行基础操作。结合 @Cache 注解,可以方便地设置缓存的过期时间、名称等属性。
- 丰富的注解支持:
@Cached:用于方法返回值缓存。
@CacheUpdate:更新缓存中的值。
@CacheInvalidate:删除缓存项。
使用注解能直观地实现缓存预热、更新和清理等操作。
- 灵活的缓存类型:支持
LOCAL(本地内存)、REMOTE(如 Redis)、BOTH(两级缓存)等多种类型,可根据业务的数据一致性要求、访问模式进行选择。
- 深度 Spring 集成:完美融入 Spring 生态,支持通过
@Autowired 注入缓存实例,并通过配置类或配置文件进行集中化管理。
三、Spring Boot 整合 JetCache 实战
下面通过一个完整的示例,演示如何在 Spring Boot 项目中集成和使用 JetCache。
1. 添加依赖
在项目的 pom.xml 文件中引入 jetcache-starter-redis 依赖。
<dependency>
<groupId>com.alicp.jetcache</groupId>
<artifactId>jetcache-starter-redis</artifactId>
<version>3.0.1</version>
</dependency>
2. 配置文件 (application.yml)
在配置文件中定义 JetCache 的相关属性,包括远程缓存(Redis)和本地缓存的设置。
jetcache:
remote:
# 使用 Redis 作为远程缓存
type: redis
# 默认远程缓存配置
default:
# Redis 服务器地址
servers: 127.0.0.1:6379
# Redis 数据库索引
database: 0
# Redis 密码,若无则留空
password:
# 连接超时时间(毫秒)
connectTimeout: 5000
# 操作超时时间(毫秒)
timeout: 5000
# 连接池最大连接数
maxTotal: 100
# Redis 集群配置示例(若使用集群)
cluster:
servers: "127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381"
password:
maxTotal: 100
local:
# 默认本地缓存配置
default:
# 本地缓存最大容量
limit: 10000
# 自定义缓存配置示例
myCache:
limit: 100
3. 理解 @Cached 注解
@Cached 注解是使用 JetCache 最常用的方式,其属性非常丰富,允许你精细控制缓存行为。

4. 启用缓存
在 Spring Boot 主启动类上添加 @EnableMethodCache 注解,并指定要扫描的包路径。
@SpringBootApplication
@EnableMethodCache(basePackages = "com.yourpackage.service")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
5. 业务层使用示例
下面是一个用户服务(UserService)的实现示例,展示了如何通过注解进行缓存的增、删、改、查。
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
// 查询用户并缓存,key为userId,过期时间300秒
@Cached(name = "userCache", key = "#userId", expire = 300)
@Override
public User getUserById(Long userId) {
return userRepository.getUserById(userId);
}
// 更新用户信息时,同步更新缓存
@CacheUpdate(name = "userCache", key = "#user.id")
@Override
public void updateUser(User user) {
userRepository.update(user);
}
// 删除用户时,使对应缓存失效
@CacheInvalidate(name = "userCache", key = "#userId")
@Override
public void deleteUser(Long userId) {
userRepository.deleteUser(userId);
}
}
关键点解析:
@Cached 注解原生支持 TTL(过期时间),这是相比 Spring Cache 的一个便利之处。
cacheType 属性可以指定为 LOCAL、REMOTE 或 BOTH。合理使用 LOCAL 或 BOTH 可以极大降低远程 Cache Server 的压力,并减少网络延迟,从而提升服务的响应速度。例如,对于极热的数据,可以采用 BOTH 类型,在本地内存保留一份副本。
通过以上步骤,你就可以在 Spring Boot 项目中轻松引入 JetCache,享受声明式缓存编程带来的便利与高效。如果你对更多开源实战技巧感兴趣,欢迎持续关注云栈社区,获取更多深度技术解析。
|