这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天
今天我学习了字节跳动掘金内部课程的架构课程,今天我学到了多级缓存架构
JVM进程缓存
1、初始Caffeine
缓存分类 我们把缓存分为两类:分布式缓存和进程本地缓存
**布式缓存,**例如Redis: 优点:缓存容量更大,可靠性更好,可以在集群间共享 缺点:访问缓存网络开销大 场景:缓存数据量较大、可靠性要求较高、需要在集群间共享
**进程本地缓存,**例如hashMap、GuavaCache 优点:读取本地内存,没有网络开销,速度快 缺点:存储量有限,可靠性低,无法共享 场景:性能要求较高,缓存数据量较小 Caffeine入门 Cafeine是一个基于Java8开发的,提供了近乎最佳命中率的高性能的本地缓存库。目前Spring内部的缓存使用的就是Caffeine。
2、Caffeine入门
Cafeine是一个基于Java8开发的,提供了近乎最佳命中率的高性能的本地缓存库。目前Spring内部的缓存使用的就是Caffeine。
OpenResty
OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
先按照好OpenResty然后配置好nginx
我们先把自己的接口请求打到nginx反向代理服务器,然发到OpenResty的服务器上
openResty的lua模块是固定的直接复制
缓存同步
1、数据同步策略
缓存数据同步的常见方式有三种:
设置有效期:给缓存设置有效期,到期后自动删除。再次查询时更新 优势:简单、方便 缺点:时效性差,缓存过期之前可能不一致 场景:更新频率较低,时效性要求低的业务
同步双写:在修改数据库的同时,直接修改缓存 优势:时效性强,缓存与数据库强一致 缺点:有代码侵入,耦合度高; 场景:对一致性、时效性要求较高的缓存数据
异步通知:修改数据库时发送事件通知,相关服务监听到通知后修改缓存数据 优势:低耦合,可以同时通知多个缓存服务 缺点:时效性一般,可能存在中间不一致状态 场景:时效性要求一般,有多个服务需要同步
Nginx本地缓存
OpenResty为Nginx提供了shard dIct功能,可以在nginx的多个worker之间共享数据,实现缓存功能,先再nginx.conf中配置共享词典,然后导入
Canal入门
Canal译为水道、管道,是阿里开源项目,基于java开发。基于数据库增量日志解析,提供增量数据订阅&消费
Canal是基于mysql主从同步实现的,mysql主从同步原理如下
Canal就是把自己伪装成mysql的一个slava节点,从而监听master的binary log变化,再把变化的信息通知给canal客户端,进而完成对其他数据库的同步
监听Canal我们首先先引入springboot整合canal的依赖,然后配置好canal,然后编写监听器来监听canal的消息,canal推送给canal客户端的是被修改的这一行数据,我们引入的canal客户端会帮助我们把这行数据封装到item实体类中,这个过程需要知道数据库和实体的映射关系,要用到注解来映射