伪代码流程
伪代码流程
# 读
def get_user(uid):
v = redis.get(f'user:{uid}')
if v is None:
row = db.query(uid) # 未命中查库
redis.set(f'user:{uid}', json.dumps(row), ex=300)
return row
return json.loads(v)
# 写
def update_user(uid, data):
db.update(uid, data) # 1) 先写库
redis.delete(f'user:{uid}') # 2) 再删缓存(不是更新)| 读策略 | 缓存优先,未命中回填 |
|---|---|
| 写策略 | 写库 + 删缓存 |
| TTL | 兜底过期,防止脏数据长期存在 |
为什么删缓存而不是更新缓存:并发写时「先写库A后写库B」与缓存的更新顺序可能交错,删除让下次读自然加载最新值。