前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JetCache设计原理浅析

JetCache设计原理浅析

作者头像
一枝花算不算浪漫
发布2022-09-28 19:53:21
1.3K0
发布2022-09-28 19:53:21
举报
文章被收录于专栏:一枝花算不算浪漫的专栏

1、目录

  • JetCache介绍
  • 上帝视角:如何设计一个缓存组件?
  • SpringCache VS JetCache
  • JetCache基本使用
  • JetCache部分源码分析

2、JetCache介绍

image.png
image.png

3、如何设计一个缓存组件?

image.png
image.png

4、SpringCache VS JetCache

image.png
image.png

5、JetCache基本使用

5.1 JetCache配置信息

代码语言:javascript
复制
jetcache:
  statIntervalMinutes: 60
  areaInCacheName: false
  penetrationProtect: true
  enableMethodCache: true
  hiddenPackages: com.xxx.xxx,com.xxx.xxx
  local:
    default:
      type: caffeine # 支持的类型:linkedhashmap、caffeine
      limit: 100
      keyConvertor: fastjson # 支持的类型:fastjson,可自定义转换器函数
      expireAfterWriteInMillis: 600000
      expireAfterAccessInMillis: 300000 
  remote:
    default:
      type: redis.lettuce # 支持的类型:redis、redis.lettuce
      keyPrefix: '系统简称:所属名字:'
      keyConvertor: fastjson
      valueEncoder: java # 支持的类型:kryo、java,可自定义编码器
      valueDecoder: java # 支持的类型:kryo、java,可自定义解码器
      expireAfterWriteInMillis: 3600000
      #readFrom: slavePreferred # 优先从Slave节点中读取
      uri: redis-sentinel://host1:26379,host2:26379,host3:26379/?sentinelMasterId=mymaster # 哨兵模式
      #uri: redis://127.0.0.1:6379/ # 单节点模式
      #mode: masterslave # 设置为主从模式
      #uri: # 集群模式
      #- redis://127.0.0.1:7000
      #- redis://127.0.0.1:7001
      #- redis://127.0.0.1:7002
image.png
image.png
image.png
image.png
image.png
image.png

5.2、JetCache使用示例

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

6、JetCache原理

image.png
image.png
  • Cache:缓存接口,定义基本方法
  • AbstractCache:抽象类,缓存接口的继承者,提供基本实现,具体实现交由不同的子类
  • LinkedHashMapCache:基于LinkedHashMap设计的简易内存缓存
  • CaffeineCache:基于Caffeine工具设计的内存缓存
  • RedisCache:Redis实现,使用Jedis客户端
  • RedisLettuceCache:Redis实现,使用Lettuce客户端
  • MultiLevelCache:两级缓存,用于封装EmbeddedCache(本地缓存)和ExternalCache(远程缓存)
  • RefreshCache:基于装饰器模式Decorator,提供自动刷新功能
  • LazyInitCache:用于@CreateCache注解创建的缓存实例,依赖于Spring

JetCache源码入口

@EbableMethodCache -> JetCacheInterceptor JetCacheAutoConfiguration

缓存get/put基本实现

Cache->AbstractCache->AbstractEmbeddedCache->LinkedHashMapCache get()->GET()->do_GET()->map.get()

获取/存放 数据 -> 构建CacheResult -> 数据统计CacheState -> 缓存监控CacheMonitor

缓存过期时间的实现

被动过期:

image.png
image.png

主动过期 Cleaner:

image.png
image.png
image.png
image.png

缓存自动刷新的实现

RefreshCache

image.png
image.png
image.png
image.png
image.png
image.png

防止缓存击穿的实现

@CachePenetrationProtect -> AbstractCache.computeIfAbsentImpl() -> synchronizedLoad();

image.png
image.png
image.png
image.png

参考:

  1. alibaba/jetcache
  2. JetCache 缓存框架的使用以及源码分析
  3. JetCache源码分析
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、目录
  • 2、JetCache介绍
  • 3、如何设计一个缓存组件?
  • 4、SpringCache VS JetCache
  • 5、JetCache基本使用
    • 5.1 JetCache配置信息
      • 5.2、JetCache使用示例
      • 6、JetCache原理
        • JetCache源码入口
          • 缓存get/put基本实现
            • 缓存过期时间的实现
              • 缓存自动刷新的实现
                • 防止缓存击穿的实现
                相关产品与服务
                云数据库 Redis
                腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档