Skip to content

Commit 4481b4c

Browse files
committed
monthly learning Cache Aside
1 parent f4fb429 commit 4481b4c

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
---
2+
title: "Cache Aside"
3+
date: 2024-11-29
4+
5+
categories: [learning note]
6+
tags: ["Cache"]
7+
keywords: ["Cache"]
8+
9+
description: "Cache Aside"
10+
---
11+
12+
## Question & Answer
13+
### 1. 什么是 cache aside 模式
14+
Cache aside 可能是最常用的缓存方法。此策略规定缓存必须位于一侧,并且应用程序将直接与缓存和数据库通信。\
15+
Cache aside通常是通用的,最适合读取密集型工作负载。
16+
#### 缓存流程
17+
```text
18+
查询策略
19+
+---------------------+
20+
| 查询缓存数据 |
21+
+---------------------+
22+
|
23+
v
24+
+---------------------+
25+
| 缓存命中?(是/否) |
26+
+---------------------+
27+
| |
28+
|是 |否
29+
v v
30+
+---------+ +---------------------+
31+
| 返回数据 | | 查询数据库 |
32+
+---------+ +---------------------+
33+
|
34+
v
35+
+---------------------+
36+
| 将数据写入缓存 |
37+
+---------------------+
38+
|
39+
v
40+
+---------------------+
41+
| 返回数据 |
42+
+---------------------+
43+
44+
更新策略
45+
+---------------------+
46+
| 数据更新请求 |
47+
+---------------------+
48+
|
49+
v
50+
+---------------------+
51+
| 更新数据库 |
52+
+---------------------+
53+
|
54+
v
55+
+---------------------+
56+
| 删除缓存或使之失效 |
57+
+---------------------+
58+
59+
```
60+
61+
### 2. 使用 cache aside 模式需要注意的问题
62+
- 此策略的缺点:在缓存未命中后需要三次网络往返。
63+
- 数据一致性,数据更新时,可能出现缓存和数据库不一致的短暂情况。
64+
- 如果缓存容量有限,可能会因缓存驱逐策略(如 LRU)导致数据被提前移除。
65+
- 缓存击穿,如果采用删除缓存的方案,在高并发场景下可能会导致缓存击穿。
66+
- 缓存雪崩,大量缓存同时失效时,可能导致大量请求直接打到数据库。
67+
- 缓存穿透,当查询的 key 在数据库中不存在,且未缓存时,可能导致对数据库的重复查询。
68+
69+
70+
## 参考
71+
[数据库缓存策略](https://dfordebugging.wordpress.com/2022/08/17/database-caching-strategies/)
72+
[聊聊数据库与缓存数据一致性问题](https://juejin.cn/post/6844903941646319623)

0 commit comments

Comments
 (0)