缓存
2024-05-09 10:31:03 2 举报
AI智能生成
1
作者其他创作
大纲/内容
分为两种
页面静态化方案(适用于小系统)
大系统
双十一缓存高并发解决方案
核心
一个http请求到服务器的各个环节都需要做缓存
浏览器缓存
缓存js
css
图片
原理
利用http协议的缓存
response headers设置Expires
Http响应头中包含的属性
浏览器会返回下载时间、过期时间,浏览器根据此来决定是否请求服务器
HTTP1.0的东西,现在基本上用的都是HTTP1.1
response headers设置Cache-control
可能存在的值
public
private
no-cache
no-store
no-transform
must-revalidate
proxy-revalidate
max-age
案例
自定义页面
cache-control: max-age=3600
表示:缓存3600s
原理:根据请求头的参数来判断请求的资源是否修改过,如果没有修改过则返回客户端304,此时客户端会使用本地缓存。
静态资源
可以使用spring mvc配置过期时间,浏览器会识别
cdn缓存
域名映射ip地址的过程
需要购买,用户的一个请求过来,会请求到离你最近的一台服务器
原理
运营商级别的负载均衡
接入层ngxin(网站的入口)
主要作用:请求转发
应用层nginx
利用nginx插件(proxy_cache)实现本地缓存
利用插件(ngx_lua插),使用lua语言开发一个脚本,去redis中拿缓存(专门为nginx搭建的redis集群)
web服务器(tomcat集群)
tomcat的本地缓存
微服务集群
本地缓存
本地缓存不存在,访问redis缓存2(另外一个redis集群)
redis不存在,最终查询数据库
什么数据需要添加缓存?
5分钟法则:5分钟之内会经常访问这个数据,则需要添加缓存
缓存回收
为什么要?首先,jvm有垃圾回收机制,但这个只是回收垃圾的,我们自己自定义的缓存应该也要有一个回收策略。避免一些不经常使用的数据一直占用内存
回收策略
基于空间(缓存的大小,多少MB)
基于容量(缓存的条数)
基于时间
存活期(TTL)
空闲期(TTI)
回收算法
FIFO:先进先出
LRU:最近最少使用(用的比较多,比如Guava Cache、Ehcache)
LFU:最不常用
堆内缓存
new出来的对象是放在堆里的
GuavaCache
Ehcache
MapDB
一般是存储非常热的数据
堆外缓存
什么叫堆外缓存
缓存放在堆外的好处
不受jvm内存限制
可以存储很大的空间
不影响GC的速度
缺点
举例
一般存储不是特别热的数据
磁盘缓存
落地到磁盘中的某个文件中
如何缓存数据
如何判断是否添加过期机制
热点数据,经常使用:不需要过期
不是热点数据,偶尔用用:设置过期
写缓存不要在事务中写
维度化缓存
防止大key

收藏
0 条评论
下一页