缓存的工作原理

缓存地址映射解析

首先来看cache的地址映射

假设某个计算机的主存的地址空间大小为256MB,即2561024KB=2561024*1024B=28x210x210Byte=228Byte,按照字节编址,cache有8个cache行,行长为64Byte,那么cache与主存的映射关系如下图可以粗略表示。有效位是用来表示是否这个缓存行已经被占用。
对于缓存行来说。每一行是64B,那么对于主存来说,每一行假如也定义成64B,那么每一行的低位地址都可以表示成0~63,即000000~111111,因为cache有8行,因此,可以用23=8,即3个bit位来表示行号。也就是蓝色的部分。
因为主存的空间是228Byte,因此可以占用的字节位(如果是比特位,那么最低位还有8个比特位)还需要19位才能表示所有的地址,这19个比特位正好可以用来表示主存的块号,即图中绿色的部分。

在这里插入图片描述

地址映射通常有三个方式,我理解的是,对于全相连映射,就是在cache里面存上主存的块号,以及字块内的地址,
在这里插入图片描述

  • 全相连,即只要cache中有空行,主存中的数据就随意放到cache行中。此时,主存的地址=主存字块标记+字块内地址
    在这里插入图片描述

此时因为无法区分cache行中的某个放过的位置是主存中的那一行的数据,因此需要存入1位有效位(用来标记是否已经被占用)+22位主存的字块地址=23位来表示,然后字块内地址正好和主存中的字块内地址是完全吻合的,对于其他的映射策略,其实字块内的地址都是一样的,因为都采用了64B为一行。后面的映射不再赘述。

  • 直接映射
    在这里插入图片描述
  • 组相连

严格的来说,全映射也是组映射,只不过是每一个行都表示为一组了。图示部分是每两行来表示一个组,那么图中紫色部分,八行分为4组,正好可以用cache中的最高位的2个比特位来表示,因此cache中还需要有效位+19-1=19位来表示主存的块号了。那么主存中的两行就可以随机放到cache组的两行的任意一行了。
在这里插入图片描述
在这里插入图片描述

  • 标记项
    在这里插入图片描述

首先看下虚拟存储器的逻辑

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Nginx 缓存机制是一种高效的反向代理缓存解决方案,其核心原理是通过在 Nginx 层面对后端服务器的响应内容进行临时存储,使得后续相同的请求可以直接从缓存中获取数据,从而减少对后端服务器的压力并提升响应速度。 ### 缓存工作原理 1. **缓存检查**:当客户端发起请求时,Nginx 会首先检查本地缓存中是否存在满足条件的内容。如果存在且未过期,则直接返回缓存内容[^1]。 2. **缓存命中**:若缓存中存在有效数据,Nginx 将直接使用该数据作为响应,而无需将请求转发至后端服务器[^1]。 3. **缓存未命中**:若缓存中没有有效数据,Nginx 会将请求转发给后端服务器,并等待响应。 4. **存储响应到缓存**:Nginx 接收到后端服务器的响应后,会根据配置策略将响应内容存储到缓存中,以便下次使用。 5. **缓存管理器**:负责维护缓存的状态,包括内存缓存区和磁盘缓存区的数据管理。同时,缓存管理器还会执行缓存淘汰策略以确保缓存空间的有效利用。 ### 数据结构缓存实现 Nginx 缓存系统涉及多个关键数据结构,例如: - `ngx_path_t`:用于定义缓存文件的路径信息。 - `ngx_http_file_cache_s`:表示缓存的基本信息,如缓存名称、大小等。 - `ngx_http_file_cache_sh_t`:共享内存区域中的缓存头部信息。 - `ngx_http_file_cache_node_t`:缓存节点,用于记录具体的缓存条目。 - `ngx_http_cache_s`:缓存上下文信息,包含当前请求的缓存状态。 - `ngx_http_file_cache_header_t`:缓存头部信息,保存响应头等元数据[^4]。 ### 框架图描述 Nginx 缓存系统的整体架构可以概括为以下几个主要组件: ``` 客户端请求 ↓ Nginx 缓存检查 → 缓存命中 → 返回缓存内容 ↓ 缓存未命中 → 向后端服务器请求 ↓ 存储响应到缓存 ↓ 返回响应给客户端 ↓ 缓存管理器(内存缓存区、磁盘缓存区) ↓ 缓存淘汰策略 ↓ 配置接口 ``` 上述流程清晰地展示了 Nginx 如何通过缓存机制优化请求处理过程。缓存管理器负责协调内存和磁盘之间的缓存数据,而缓存淘汰策略则确保了缓存空间不会无限增长。此外,用户可以通过配置接口灵活调整缓存行为,以适应不同的业务需求。 ### 相关问题 1. Nginx 缓存如何配置? 2. Nginx 缓存失效机制有哪些? 3. Nginx 缓存支持哪些淘汰策略? 4. 如何查看 Nginx 缓存的命中率? 5. Nginx 缓存浏览器缓存有何区别?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

micro_cloud_fly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值