作者:张隆 阿里电影演出技术中心团队
本文将为大家介绍JetCache缓存开源组件的前世今生,并剖析了JetCache的工作原理及设计优势。
一、JetCache的前世今生

1.1 诞生-阿里彩票JetCache的伊甸园

-
2013年,JetCache诞生于 [ 阿里彩票 ],作者是 [ huangli ] 凭借得天独厚的Tair支持和丰富的Spring生态注解支持,赢得了大家的喜爱。
-
2015年,随着SpringBoot的大热和集团内PandoraBoot的彻底铺开,JetCache以Starter的形式实现了扩展,优化了配置项,在架构设计和性能上更上一层楼。
-
2015年同年,JetCache开源至Github,作为alibaba的开源缓存框架,其易用性和设计先进性吸引了大批国内外用户,截止当前在github上累计3.7k star,870 fork。
-
2018年JetCache最大版本更新,对整体的设计进行了调整,修改了默认的序列化方式,集成支持了SpringData,RedisLettuce,Redisson等更加高效以及功能更加灵活且高级的三方SDK。
1.2 整合-开源界大放异彩

-
JetCache原生支持的远程缓存是Tair,但是Tair在集团外并不可用。JetCache为了拥抱开源,实现了时下主流的GuavaCache, CaffeineCache, Redis,MemCache基本覆盖了国内的主流缓存中间件。
-
在功能性方面,JetCache满足了用户一行注解解决Method缓存的刚需,同时也能通过叠加注解的方式非常高效的处理缓存穿透,缓存击穿,缓存雪崩,缓存失效等经典分布式缓存的问题,这让用户充分体验到了缓存框架的效率优势和设计先进性。
-
在扩展性方面,JetCache满足了用户一行注解解决Method缓存的刚需,也提供了优秀的扩展能力。想要实现一个新的Cache类型,只需要实现AbstractEmbeddedCache或者AbstractExternalCache就可以以非常低廉的成本实现一个新的缓存框架。
1.3 挑战-SpringCache江湖地位
-
在2015年最火的框架是SpringBoot,SpringBoot提供了非常丰富的组件支持以及模块化的组件管理,其中就包括基于JSR-107--JCacheAPI实现的SpringCache框架。
-
SpringCache框架很好的实现了JCacheAPI,在当时占据了非常有力的位置,几乎所有的SpringBoot初创项目,都选择了使用SpringCache来作为他们的第一个缓存框架。但随着软件工程的规模越来越大,分布式场景的经典问题也接踵而至,显然SpringCache在应对分布式环境的经典问题时显得太过于稚嫩。
对于分布式场景,缓存穿透,缓存击穿,缓存雪崩 等经典问题,缺少足够成熟的方案。
高级特性上,如 分布式锁,多级缓存滑动窗口,缓存序列化,异步API支持等实际工作场景经常会需要用到的核心能力,要么没有,要么不够用。
对于扩展性上,设计的不够开放和正交,很难低成本的完成一些高级功能的扩展。
-
JetCache在这方面做的就不错,并且在迁移缓存方面基本上可以做到换注解平替,所以一旦工程规模达到一定量级,很多架构师会选择从SpringCache的方式切换到JetCache上。
二、JetCache是如何工作的
完整的组件串联文档:
https://app.heptabase.com/w/db02907915c401c6e33ddcc47e4d67a589047a846be16f30de1644501d939787

2.1 JSR-107--缓存JCache标准抽象实现
Java在2012的JSR-107协议中新增了关于缓存的抽象设计标准--JCache。

2.2 丰富注解-无侵入抽象设计

2.3 启动器和配置-Bean方式

@Configuration
@EnableMethodCache(basePackages = "com.taobao.film.tfmind")
@EnableCreateCacheAnnotation
public class JetCacheConfig {
@Bean
public GlobalCacheConfig config(
@Qualifier("ldbTairManager") TairManager tairLdbManager,
@Qualifier("mdbTairManager") TairManager tairMdbManager,
@Qualifier("rdb3CacheCompose") Rdb3CacheCompose rdb3CacheCompose) {
Map<String, CacheBuilder> localBuilders = new HashMap<>();
Map<String, CacheBuilder> remoteBuilders = new HashMap<>();
// 本地缓存 CaffeineCache
EmbeddedCacheBuilder<?> localBuilder = CaffeineCacheBuilder
.createCaffeineCacheBuilder()
.keyConvertor(FastjsonKeyConvertor.INSTANCE);
localBuilders.put(CacheConsts.DEFAULT_AREA, local

JetCache是一个源自阿里的开源缓存框架,最初在阿里彩票项目中诞生,支持多种缓存中间件如GuavaCache、CaffeineCache、Redis等。文章详细介绍了JetCache的起源、发展、与SpringCache的对比,以及其在分布式缓存问题如穿透、击穿、雪崩的解决方案。此外,还探讨了JetCache的序列化方式、多级缓存、加载器和监听器等高级特性,并展示了在电影演出业务中的定制化扩展应用。
最低0.47元/天 解锁文章
1153

被折叠的 条评论
为什么被折叠?



