request_cache技术架构

request_cache 是指对一次完整 Request 的结果做缓存,它和传统的 数据缓存(data cache) 有一个本质区别:

**数据缓存缓存的是数据;request_cache缓存的是请求 → 响应结果。特别适合微服务、API Gateway、LLM、搜索、推荐、复杂查询等场景。


1. Request Cache是什么

典型模型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Request
│
▼
┌─────────────────┐
│ Request Cache │
│ key → response │
└────────┬────────┘
│
┌────┴─────┐
│ │
Hit Miss
│ │
▼ ▼
Response Backend
│
▼
DB / RPC / API
│
▼
写入 Cache

它解决的不是数据库慢而是重复计算

传统 Cache:

1
2
3
4
5
User ID
↓
Redis
↓
User Object

Request Cache:

1
2
3
4
5
完整 Request
↓
Redis
↓
完整 Response

2.L1 + L2 + Backend

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
     ┌─────────────┐
│ Client │
└──────┬──────┘
│
▼
┌─────────────────┐
│ API Gateway │
└────────┬────────┘
│
▼
┌───────────────────────┐
│ Application │
│ │
│ Request Cache │
│ │ │
│ ├── L1 Local │
│ │ │
│ └── L2 Redis │
└───────────┬───────────┘
│ miss
▼
┌──────────────────┐
│ Business Service │
└────────┬─────────┘
│
┌──────┴──────┐
▼ ▼
DB RPC

3.相对稳定读缓存架构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
          Request
│
▼
Build Cache Key
│
▼
┌─────────────┐
│ L1 Cache │
└──────┬──────┘
│ miss
▼
┌─────────────┐
│ L2 Redis │
└──────┬──────┘
│ miss
▼
┌─────────────┐
│ SingleFlight│
└──────┬──────┘
│
▼
Backend
│
┌─────────┼─────────┐
│ │ │
200 404 Error
│ │
▼ ▼
Cache Negative
│ Cache
└────┬────┘
▼
Response