JetCache 缓存开源组件设计精要

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

​作者:张隆 阿里电影演出技术中心团队

本文将为大家介绍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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值