JetCache设计原理浅析

PS:本文为小组内部分享,图片居多,jetCache原理浅析。

1、目录

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

2、JetCache介绍

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

4、SpringCache VS JetCache

5、JetCache基本使用

5.1 JetCache配置信息

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
复制代码

5.2、JetCache使用示例

6、JetCache原理

  • 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

缓存过期时间的实现

被动过期:

主动过期 Cleaner:

缓存自动刷新的实现

RefreshCache

防止缓存击穿的实现

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值