1. 缓存和数据库一致性更新是什么?
1.1 缓存和数据库的关系
介绍
- 缓存:高性能产品
- 数据库:性能低产品
- 缓存+数据库 = 高效的数据存储产品组合
- 缓存+数据库业务提供了什么?
1.提供了性能的提升((更好的存储介质,更贴近请求的存储距离
2.提供了简便的数据抽象
1.2 缓存和数据库一致性更新本质是什么?
保证用户访问缓存和数据库中的数据是一样的!
2. 为什么需要一致性更新?
2.1 库存系统一致性 - 例子1

3. 缓存和数据库一致性更新原则
3.1 常见的缓存访问模式
- Cache-Aside (本地缓存)

当客户端有很多的时候,该模式效率会很低。
- Cache-Aside(缓存中间件 - 第一种)

- Cache-Aside(缓存中间件 - 第二种)

3.2 常见的缓存访问模式(读取)
- Cache-Aside (缓存读取)

3.3 常见的缓存访问模式(更新模式)
- 先更新缓存,再更新数据库

但是可能存在更新数据库失败的问题
或下面的情况

- 先更新数据库,再更新缓存

但是也可能发生缓存更新失败的问题
或下面的情况

- 先删除缓存,再更新数据库

但是也会有下面的情况出现

- 先更新数据库,再删除缓存

但是无法立即将新数据返回给其他的访问请求,或者说后续缓存删除失败等等
或下面的情况

总结
- 更新,不删除
a.先更新缓存,在更新数据库
b.先更新数据库,在更新缓存 - 需要删除
a.先删除缓存,在更新数据库
b.先更新数据库,在删除缓存
3.4 常见缓存访问模式(Through)
- 缓存和数据库库交互 - Read Through

- 缓存和数据库库交互 - Write Through


- 缓存和数据库库交互 - Write Behind

3.5 一致性更新目标
-
最终一致性 - 过期时间(TTL)
1.最终一致性:过期了会取数据库最新值
2.剔除冷的缓存,节省缓存空间,提升效率 -
最终一致性 - 异步更新

- 最终一致性 - 重试机制


- 强一致性

如果觉得有收获,欢迎点赞和评论,更多知识,请点击关注查看我的主页信息哦~
网友评论