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();



参考:

  1. alibaba/jetcache

  2. JetCache 缓存框架的使用以及源码分析

  3. JetCache源码分析

JetCache设计原理浅析的更多相关文章

  1. 沉淀,再出发:docker的原理浅析

    沉淀,再出发:docker的原理浅析 一.前言 在我们使用docker的时候,很多情况下我们对于一些概念的理解是停留在名称和用法的地步,如果更进一步理解了docker的本质,我们的技术一定会有质的进步 ...

  2. 消息队列——ActiveMQ使用及原理浅析

    文章目录 引言 正文 一.ActiveMQ是如何产生的? 产生背景 JMS规范 基本概念 JMS体系结构 二.如何使用? 基本功能 消息传递 P2P pub/sub 持久订阅 消息传递的可靠性 事务型 ...

  3. CPU处理器架构和工作原理浅析

    CPU处理器架构和工作原理浅析 http://c.biancheng.net/view/3456.html 汇编语言是学习计算机如何工作的很好的工具,它需要我们具备计算机硬件的工作知识. 基本微机设计 ...

  4. Atitit ati licenseService    设计原理

    Atitit ati licenseService    设计原理 C:\0workspace\AtiPlatf\src_atibrow\com\attilax\license\LicenseX.ja ...

  5. kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)

    问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行"随机读写"的原因是什么? 3.kafka集群consumer和producer状 ...

  6. html5设计原理(转)

    转自:   http://www.cn-cuckoo.com/2010/10/21/the-design-of-html5-2151.html 今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一 ...

  7. HTTP长连接和短连接原理浅析

    原文出自:HTTP长连接和短连接原理浅析

  8. 学习HTML5必读之《HTML5设计原理》

    引子:很久前看过的一遍受益匪浅的文章,今天再次转过来,希望对学习HTML5的朋友有所帮助. 今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一方面,当然了,就是HTML5.我可以站在这儿只讲HT ...

  9. 分布式文件系统FastDFS设计原理

    原文地址: http://blog.chinaunix.net/uid-20196318-id-4058561.html FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker ...

  10. ApplicationContext容器的设计原理

    1.在ApplicationContext容器中,我们以常用的FileSystemXmlApplicationContext的实现为例来说明ApplicationContext容器的设计原理. 2.在 ...

随机推荐

  1. Vertx 实现webapi实战项目(二)

      消息解析:消息序列化和反序列化---上传json解析和返回json编码. 整理下工程项目 一:实现消息接口,在imp文件夹下新建接口MessageFactory 1 /****** 2 * 消息编 ...

  2. Golang基础笔记九之方法与接口

    本文首发于公众号:Hunter后端 原文链接:Golang基础笔记九之方法与接口 本篇笔记介绍 Golang 里方法和接口,以下是本篇笔记目录: 方法 接口 用结构体实现类的功能 1.方法 首先介绍一 ...

  3. SqlServer 查看所有触发器信息的命令

    https://blog.csdn.net/chenghaibing2008/article/details/45332993 SELECT       object_name(a.parent_ob ...

  4. 一文速通 Python 并行计算:13 Python 异步编程-基本概念与事件循环和回调机制

    一文速通 Python 并行计算:13 Python 异步编程-基本概念与事件循环和回调机制 摘要: Python 异步编程基于 async/await 构建协程,运行在事件循环中.协程生成 Task ...

  5. Windows 10文件夹中的一些高级搜索技巧

    搜索文件中的内容 默认的win10搜索是只针对文件名搜索的,但有的时候我们需要搜索文件中包含特定内容的文件,这时候需要设置一下搜索的选项打开搜索文件名和内容选项: 打开文件夹–查看 选择选项 打开文件 ...

  6. bmp文件结构解析

    参考博客园 虽然项目里面用的是png 但是很可惜png我没有怎么搞懂,先搞懂最容易解析的bmp数据, 个人所见bmp32位表示的是基本上是没有压缩的数据. 先用 ps 生成一个8*8黑色的数据. bm ...

  7. win10 注册

    最近新安装了一台AMD YES 2700. 安装win10的企业版,没有注册,推荐淘宝. 但是我没有使用淘宝.你懂得链接 FREE. 以后赚钱了有机会用正版吧. http://www.tudoupe. ...

  8. 深度解密:Win11 22000.100界面更美观、更顺手

    微软官方面向Dev通道的Insider会员又推送Windows 11新预览版系统了,操作系统版本号升级为Build 22000.100. 这是Windows 11预览版上线以来的第四次累积更新,微软继 ...

  9. Unity点到线段的最短距离

    抄的Unity的源码 HandleUtility.DistancePointLine 是UnityEditor代码,源码如下,这样就可以在Runtime中运行 注意性能开销! /// <summ ...

  10. 从0开始实现自己的Shell

    实现自己的Shell(计蒜客996第三周实验) 目录 实现自己的Shell(计蒜客996第三周实验) 进程.地址空间与线程 进程和地址空间 线程 进程控制块 进程状态与用户态和内核态之间的切换 进程状 ...