【极客源码】JetCache源码(二)顶层视图

Java极客  |  作者  /  铿然一叶
这是Java极客的第 71 篇原创文章

相关阅读:

【极客源码】JetCache源码(一)开篇
JAVA基础(一)简单、透彻理解内部类和静态内部类
JAVA基础(二)内存优化-使用Java引用做缓存
JAVA基础(三)ClassLoader实现热加载
JAVA基础(四)枚举(enum)和常量定义,工厂类使用对比
JAVA基础(五)函数式接口-复用,解耦之利刃
JAVA编程思想(一)通过依赖注入增加扩展性
JAVA编程思想(二)如何面向接口编程
JAVA编程思想(三)去掉别扭的if,自注册策略模式优雅满足开闭原则
JAVA编程思想(四)Builder模式经典范式以及和工厂模式如何选?
HikariPool源码(二)设计思想借鉴
人在职场(一)IT大厂生存法则


1. 项目地址

仓库 地址
github github.com/alibaba/jet…
码云 gitee.com/mirrors/Jet…

2. 工程结构

JetCache的工程结构如下:

子工程 描述
jetcache-anno 基于Spring提供@Cached和@CreateCache注解支持。
jetcache-anno-api 定义jetcache的注解和常量,不传递依赖。如果你想把Cached注解加到接口上,又不希望你的接口jar传递太多依赖,可以让接口jar依赖jetcache-anno-api。
jetcache-core 核心api,完全通过编程来配置操作Cache,不依赖Spring。两个内存中的缓存实现LinkedHashMapCache和CaffeineCache也由它提供。
jetcache-starter 使能在spring中使用
jetcache-support 对不同场景下使用redis做的适配。
jetcache-test 测试代码
samples 使用例子

3. Level-0 概念模型

任何业务系统,在理解其核心业务概念后,后续就能在此基础上快速的做更深入的了解和延展,达到事半功倍的效果。下图是JetCache的核心概念,在代码中对应类或接口:

  • Cache
  • 缓存,存储缓存数据,并提供get,put,remove等缓存操作。

  • Cleaner
  • 缓存清理者,否则清理失效的缓存数据。

  • CacheBuilder
  • 缓存创建者,负责创建缓存,每个缓存都有自己的创建者。

    这里没有统一使用缓存工厂来创建,更利于解耦,因为每个缓存的创建方式差异较大,将创建者独立出来则互不影响。

  • CacheEvent
  • 缓存事件,例如get事件,put事件,remove事件,区分缓存事件可以便于做统计。

  • CacheResult
  • 缓存结果,记录缓存操作的结果,包括结果码,描述和结果数据。

  • CacheValueHolder
  • 缓存值Holder,存放缓存值以及访问时间和失效时间,可用于判断缓存是否失效。

  • CacheConfig
  • 缓存配置,存放可 动态变化的缓存参数和 可动态注入的工具类。将这些内容从cache中分离,放到config中使得职责更清晰。此模式在HikariPool也使用到,值得借鉴。

  • RefreshPolicy
  • 缓存刷新策略。

  • KeyConvertor
  • 缓存key生成器,用于生成缓存的key。

  • CacheLoader
  • 缓存加载器,用于加载缓存数据。

  • CacheMonitor
  • 缓存监控,监控缓存事件,对缓存事件做处理。

  • CacheStat
  • 缓存统计信息,一个值对象,记录缓存的get次数,get时间,命中率等信息。

    4. 编写自己的缓存工具

    开发者能力层次:

    级别 具备能力
    初级 照着详细设计文档能完成编码。
    中级 照着概念模型即可完成编码。(当然会有一些细节的澄清)。
    高级 具备独立建模能力,自己建模自己编码。

    建议初,中级开发者可以在以上核心概念的基础上,尝试编写自己的缓存工具,看看能写到什么程度,好坏并不重要,重要的是在编写过程中碰到的问题会引发你思考,并尝试寻找答案,这样能大大能提高你的编码能力。

    编写时不需要写得很好,只要能用上这些概念就行,存放缓存的数据结构就用ConcurrentHashMap。

    4. 总结

    1. 阅读源码可由粗到细,先大致看下目录/工程结构,核心概念,然后逐层展开,能事半功倍。

    2. 调试是加快理解源码最有效的方式,大致了解代码后,就快速调试起来。

    3. 平时多注意逐步提高自己的能力,能独立建模并完成编码。

    end.


    <--阅过留痕,左边点赞!


    猜你喜欢

    转载自juejin.im/post/5ec0b2dde51d4528dd23d026