2022-04-01 10:04:30
JetCache-Alibaba 是阿里巴巴开源的基于 Spring 和 Redis 的分布式缓存框架,支持多级缓存、多种缓存协议及高性能场景,适用于中小型应厅册用开发。 以下是详细介绍:
一、核心特点基于注解通过 @Cached、@CacheUpdate、@CacheInvalidate 等注解实现缓存配置与操作,代码简洁且易于维护。例如,使用 @Cached(name="cacheName", key="#id", expire=3600) 可直接定义缓存名称、键生成规则及过期时间。
多级缓存支持支扮烂宏持本地内存(Memory)、Redis、Tair、Memcached 等存储类型,可配置为单级或多级缓存(如 LOCAL+REMOTE)。多级缓存通过本地内存减少远程访问,提升命中率并降低延迟。
多种缓存协议兼容支持 Redis、Tair、Memcached 等协议,可通过配置灵活切换存储后端,适应不同业务需求。
高性能优化针对分布式高并发场景优化数据结构与查询算法,例如使用一致性哈希减少缓存雪崩风险,支持批量操作降低网络开销。
易用性与扩展性提供简单的 API(如 CacheBuilder 创建缓存、Cache 对象操作数据),支持 Spring 注入与自定义配置。通过扩展接口可实现自定义缓存策略或存储适配器。

热点数据缓存将频繁访问的数据(如商品详情、用户信息)缓存在本地或 Redis 中,减少数据库压力。例如,电商平台的商品详情页通过 @Cached 缓存数据,TTL 设置为 5 分钟。
高并发读写优化在秒杀、抢购等场景中,通过本地缓存(LOCAL)吸收瞬时流量,避免直接冲击 Redis 或数据库。例如,使用 @Cached(cacheType=LOCAL) 缓存库存数据,配合异步更新远程缓存。
多级缓存融合结合本地缓存(低延迟)与远程缓存(持久化),平衡性能与可靠性。例如,配置 cacheType=BOTH 时,数据先写入本地内存,再异步同步到 Redis。
高速查询加速对复杂查询结果(如聚合数据)进行缓存,显著提升响应速度。例如,通过 @CreateCache 创建查询缓存,设置 expire=300 定期刷新。
缓存管理
CacheBuilder:创建缓存实例,支持配置存储类型、过期策略等。
Cache 接口:提供 get(key)、put(key, value)、remove(key) 等基础操作。
注解驱动
@Cached:定义缓存规则,支持 name(缓存名称)、key(SPEL 表达式生成键)、expire(过期时间)、历郑cacheType(存储类型)等属性。
@CacheUpdate:更新缓存内容,通常与数据库更新操作同步。
@CacheInvalidate:删除缓存,常用于数据删除或批量更新场景。
存储类型配置
本地缓存:基于 Caffeine 或 LinkedHashMap 实现,适合存储热点数据。
远程缓存:支持 Redis(单机/集群)、Tair、Memcached,通过 jetcache.remote 配置连接参数。
两级缓存:通过 cacheType=BOTH 启用,数据同时写入本地与远程存储。
添加依赖在 pom.xml 中引入 JetCache Starter:
<dependency> <groupId>com.alicp.jetcache</groupId> <artifactId>jetcache-starter-redis</artifactId> <version>3.0.1</version></dependency>配置 YAML 文件配置远程 Redis 与本地缓存参数:
jetcache: remote: type: redis default: servers: 127.0.0.1:6379 database: 0 password: timeout: 5000 local: default: limit: 10000启用缓存注解在启动类上添加 @EnableMethodCache,指定扫描包路径:
@SpringBootApplication@EnableMethodCache(basePackages = "com.example.service")public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}业务代码示例使用注解实现缓存操作:
@Servicepublic class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; // 查询缓存:TTL=300秒,存储类型为两级缓存 @Cached(name = "userCache", key = "#userId", expire = 300, cacheType = CacheType.BOTH) @Override public User getUserById(Long userId) { return userRepository.findById(userId); } // 更新缓存 @CacheUpdate(name = "userCache", key = "#user.id") @Override public void updateUser(User user) { userRepository.save(user); } // 删除缓存 @CacheInvalidate(name = "userCache", key = "#userId") @Override public void deleteUser(Long userId) { userRepository.deleteById(userId); }}JetCache 通过注解驱动、多级缓存与高性能设计,为分布式系统提供了易用且高效的缓存解决方案。其与 Spring 的深度集成降低了开发成本,适合电商、社交等需要处理高并发读写的业务场景。合理配置本地缓存与远程存储的比例,可进一步优化系统性能与资源利用率。