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();
参考:
JetCache设计原理浅析的更多相关文章
- 沉淀,再出发:docker的原理浅析
沉淀,再出发:docker的原理浅析 一.前言 在我们使用docker的时候,很多情况下我们对于一些概念的理解是停留在名称和用法的地步,如果更进一步理解了docker的本质,我们的技术一定会有质的进步 ...
- 消息队列——ActiveMQ使用及原理浅析
文章目录 引言 正文 一.ActiveMQ是如何产生的? 产生背景 JMS规范 基本概念 JMS体系结构 二.如何使用? 基本功能 消息传递 P2P pub/sub 持久订阅 消息传递的可靠性 事务型 ...
- CPU处理器架构和工作原理浅析
CPU处理器架构和工作原理浅析 http://c.biancheng.net/view/3456.html 汇编语言是学习计算机如何工作的很好的工具,它需要我们具备计算机硬件的工作知识. 基本微机设计 ...
- Atitit ati licenseService 设计原理
Atitit ati licenseService 设计原理 C:\0workspace\AtiPlatf\src_atibrow\com\attilax\license\LicenseX.ja ...
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)
问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行"随机读写"的原因是什么? 3.kafka集群consumer和producer状 ...
- html5设计原理(转)
转自: http://www.cn-cuckoo.com/2010/10/21/the-design-of-html5-2151.html 今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一 ...
- HTTP长连接和短连接原理浅析
原文出自:HTTP长连接和短连接原理浅析
- 学习HTML5必读之《HTML5设计原理》
引子:很久前看过的一遍受益匪浅的文章,今天再次转过来,希望对学习HTML5的朋友有所帮助. 今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一方面,当然了,就是HTML5.我可以站在这儿只讲HT ...
- 分布式文件系统FastDFS设计原理
原文地址: http://blog.chinaunix.net/uid-20196318-id-4058561.html FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker ...
- ApplicationContext容器的设计原理
1.在ApplicationContext容器中,我们以常用的FileSystemXmlApplicationContext的实现为例来说明ApplicationContext容器的设计原理. 2.在 ...
随机推荐
- Vertx 实现webapi实战项目(二)
消息解析:消息序列化和反序列化---上传json解析和返回json编码. 整理下工程项目 一:实现消息接口,在imp文件夹下新建接口MessageFactory 1 /****** 2 * 消息编 ...
- Golang基础笔记九之方法与接口
本文首发于公众号:Hunter后端 原文链接:Golang基础笔记九之方法与接口 本篇笔记介绍 Golang 里方法和接口,以下是本篇笔记目录: 方法 接口 用结构体实现类的功能 1.方法 首先介绍一 ...
- SqlServer 查看所有触发器信息的命令
https://blog.csdn.net/chenghaibing2008/article/details/45332993 SELECT object_name(a.parent_ob ...
- 一文速通 Python 并行计算:13 Python 异步编程-基本概念与事件循环和回调机制
一文速通 Python 并行计算:13 Python 异步编程-基本概念与事件循环和回调机制 摘要: Python 异步编程基于 async/await 构建协程,运行在事件循环中.协程生成 Task ...
- Windows 10文件夹中的一些高级搜索技巧
搜索文件中的内容 默认的win10搜索是只针对文件名搜索的,但有的时候我们需要搜索文件中包含特定内容的文件,这时候需要设置一下搜索的选项打开搜索文件名和内容选项: 打开文件夹–查看 选择选项 打开文件 ...
- bmp文件结构解析
参考博客园 虽然项目里面用的是png 但是很可惜png我没有怎么搞懂,先搞懂最容易解析的bmp数据, 个人所见bmp32位表示的是基本上是没有压缩的数据. 先用 ps 生成一个8*8黑色的数据. bm ...
- win10 注册
最近新安装了一台AMD YES 2700. 安装win10的企业版,没有注册,推荐淘宝. 但是我没有使用淘宝.你懂得链接 FREE. 以后赚钱了有机会用正版吧. http://www.tudoupe. ...
- 深度解密:Win11 22000.100界面更美观、更顺手
微软官方面向Dev通道的Insider会员又推送Windows 11新预览版系统了,操作系统版本号升级为Build 22000.100. 这是Windows 11预览版上线以来的第四次累积更新,微软继 ...
- Unity点到线段的最短距离
抄的Unity的源码 HandleUtility.DistancePointLine 是UnityEditor代码,源码如下,这样就可以在Runtime中运行 注意性能开销! /// <summ ...
- 从0开始实现自己的Shell
实现自己的Shell(计蒜客996第三周实验) 目录 实现自己的Shell(计蒜客996第三周实验) 进程.地址空间与线程 进程和地址空间 线程 进程控制块 进程状态与用户态和内核态之间的切换 进程状 ...