各种 Web 缓存技术包含哪些部分?

各种 Web 缓存技术包含哪些部分?

1. 各种 Web 缓存技术包含哪些部分?

想象一下,你在一家咖啡店:

你需要一杯咖啡(资源),但每次都重新制作会很慢。在 Web 开发中,缓存技术就像是将咖啡提前准备好,以便快速提供给顾客(用户)。

(1) 核心组成部分

浏览器缓存:

浏览器会缓存静态资源(如 HTML、CSS、JavaScript、图片)以减少重复请求。示例:Cache-Control: max-age=3600

CDN 缓存:

内容分发网络(CDN)会在全球范围内的边缘节点缓存资源,加速用户的访问速度。示例:https://cdn.example.com/image.jpg

服务器缓存:

Web 服务器(如 Nginx、Apache)或应用服务器(如 Node.js、PHP)可以缓存动态生成的内容。示例:proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m;

数据库缓存:

数据库查询结果可以被缓存,避免重复执行耗时的 SQL 查询。示例:SELECT * FROM users WHERE id = 1; -- 第一次查询后缓存结果

内存缓存:

使用内存缓存(如 Redis、Memcached)存储频繁访问的数据,提高读取速度。示例:const redisClient = require('redis').createClient();

redisClient.set('user:1', JSON.stringify(user));

HTTP 缓存头:

HTTP 协议提供了多种缓存控制机制,通过响应头实现缓存策略。常见头部:

Cache-Control:指定缓存的有效时间和行为。ETag:为资源生成唯一标识符,用于验证缓存是否有效。Expires:指定资源的过期时间。Last-Modified:记录资源的最后修改时间。

示例:Cache-Control: public, max-age=86400

ETag: "abc123"

2. 使用场景是什么?

(1) 静态资源加速

场景:缓存静态文件(如 CSS、JavaScript、图片)以减少服务器负载。示例:Cache-Control: max-age=31536000

(2) 动态内容缓存

场景:缓存动态生成的内容(如 API 响应、HTML 页面)以提高性能。示例:proxy_cache_valid 200 302 10m;

(3) 全球化内容分发

场景:通过 CDN 将内容分发到离用户更近的边缘节点,降低延迟。示例:https://cdn.example.com/assets/style.css

(4) 数据库查询优化

场景:缓存数据库查询结果以减少重复查询的开销。示例:cached_result = cache.get('user_list')

if not cached_result:

cached_result = db.query("SELECT * FROM users")

cache.set('user_list', cached_result)

(5) 会话状态管理

场景:使用内存缓存存储用户的会话数据(如登录状态)。示例:redisClient.set(`session:${sessionId}`, JSON.stringify(userData), 'EX', 3600);

(6) 实时数据缓存

场景:缓存实时性要求较低的数据(如天气信息、新闻列表)。示例:const weatherData = await redisClient.get('weather');

if (!weatherData) {

weatherData = await fetchWeatherAPI();

redisClient.set('weather', JSON.stringify(weatherData), 'EX', 600);

}

3. 底层原理是什么?

(1) HTTP 缓存机制

强制缓存:

使用 Cache-Control 和 Expires 指定资源的缓存时间。示例:Cache-Control: max-age=3600

浏览器在缓存时间内直接使用本地副本,无需向服务器发送请求。

协商缓存:

使用 ETag 或 Last-Modified 验证缓存是否有效。示例:If-None-Match: "abc123"

如果资源未改变,服务器返回 304 Not Modified,浏览器使用缓存。

(2) CDN 工作原理

边缘节点缓存:

CDN 将资源缓存在靠近用户的边缘节点,减少主服务器的压力。

缓存刷新:

当源站资源更新时,CDN 会自动或手动刷新缓存。

(3) 内存缓存

键值存储:

内存缓存(如 Redis、Memcached)以键值对形式存储数据。

过期策略:

支持 TTL(Time To Live)设置,自动清理过期数据。

(4) 数据库缓存

查询缓存:

数据库引擎(如 MySQL)会缓存查询结果。

应用层缓存:

使用 ORM(如 Sequelize、Hibernate)或中间件缓存查询结果。

(5) 性能优化

减少网络延迟:

缓存减少了客户端与服务器之间的往返次数。

降低服务器负载:

缓存减少了对后端服务的请求频率。

4. 图示说明

(1) HTTP 缓存流程

用户请求 -> 浏览器检查缓存 -> 是否命中缓存?

|

v

是 -> 直接返回缓存内容

否 -> 向服务器请求资源 -> 返回新资源并更新缓存

(2) CDN 缓存结构

+--------------------------+

| 用户请求 | -> 最近的边缘节点

+--------------------------+

| 边缘节点缓存 | -> 源站

+--------------------------+

| 源站资源 |

+--------------------------+

(3) 内存缓存工作流程

用户请求 -> 检查内存缓存 -> 是否命中缓存?

|

v

是 -> 返回缓存数据

否 -> 查询数据库 -> 更新缓存并返回数据

5. 总结

(1) 核心组成部分

浏览器缓存:减少重复请求。CDN 缓存:加速全球化内容分发。服务器缓存:缓存动态内容。数据库缓存:优化查询性能。内存缓存:存储高频访问数据。HTTP 缓存头:控制缓存策略。

(2) 使用场景

静态资源加速。动态内容缓存。全球化内容分发。数据库查询优化。会话状态管理。实时数据缓存。

(3) 底层原理

HTTP 缓存机制:强制缓存和协商缓存。CDN 工作原理:边缘节点缓存和源站同步。内存缓存:键值存储和过期策略。数据库缓存:查询缓存和应用层缓存。性能优化:减少网络延迟和服务器负载。

相关推荐

蹶的解释
365bet取款要多久

蹶的解释

📅 07-27 👁️ 6641
东北四大神兽:东北四大神兽分别是啥
365bet取款要多久

东北四大神兽:东北四大神兽分别是啥

📅 07-04 👁️ 5444
蠣成语大全 蠣字成语有哪些
365bet取款要多久

蠣成语大全 蠣字成语有哪些

📅 07-07 👁️ 7236
果子狸价格多少钱一斤?
365bet体育投

果子狸价格多少钱一斤?

📅 07-17 👁️ 9683
主板的声卡维修(微星主板声卡坏了怎么维修)
365bet取款要多久

主板的声卡维修(微星主板声卡坏了怎么维修)

📅 07-11 👁️ 9917
大学生手机必备16款超好用APP
365bet体育投

大学生手机必备16款超好用APP

📅 07-24 👁️ 4918
磁力搜索引擎哪个好用排行榜?如何选择?
365bet取款要多久

磁力搜索引擎哪个好用排行榜?如何选择?

📅 07-15 👁️ 2938
南京是哪个省的(详解3篇)
365体育app网址

南京是哪个省的(详解3篇)

📅 08-02 👁️ 2356
石榴怎么做好吃,石榴的几种做法(7种石榴的做法任意选择)