《全栈工程师修炼指南》学习笔记 16

2023-02-18  本文已影响0人  VioletJack

持久层 - 缓存

缓存的本质

缓存,就是为了节约对原始资源重复获取的开销,而将结果数据副本存放起来以供获取的方式。
缓存生效的本质是空间换时间。
只有当一个操作是幂等的、安全的,这样的操作才可以考虑被缓存。
当一个数据是幂等的,安全的,但不会被重复获取,那么这类数据不需要使用缓存。
缓存可以是为了提高获取资源的速度,也可以是为资源的获取分担压力。

缓存的几个特点

缓存往往针对的是资源
缓存数据必须是重复获取的。
缓存是为了解决开销问题。
缓存的存取不一定是更快的。
缓存的各种读写模式是可以组合使用的。
选择哪种缓存模式算是一种 trade-off,根据实际情况来决定。

缓存的两个动机

追求更低的延迟。
追求更高的吞吐量

缓存需要注意的点

同时发送多个请求,如何保证一致性?
如果数据更新异常,会不会出现缓存问题?

缓存无处不在

DNS 缓存
反向代理缓存
后端 MVC 各级缓存
网络请求缓存 Cache-control
CDN
……

缓存应用模式

Cache-Aside

应用查询缓存是否有数据结果。(判断选择行为)
如果有,从缓存返回数据结果。
如果没有,执行原始逻辑,返回数据结果、
将数据结果写入缓存。

Read-Through

应用向缓存要求数据。(直接问缓存要)
如果缓存中有数据,返回给应用。
如果缓存中没有数据,缓存查询数据库,并将结果写入自己。
缓存将数据返回给应用。

Write-Through

这种模式一般用于处理数据更新的场景。
缓存系统需要自己内部保证并发场景下,缓存更新的顺序要和数据库更新的顺序一致。
步骤

Write-Around

类似 Write Through 模式,但是它只更新数据库,而缓存只提供读的操作。

Write-Back

高吞吐量、高运行速度,但容易出现一致性和数据丢失的问题。
应用要求缓存更新数据
缓存就数据写入自己
缓存告知应用更新完成
缓存异步更新数据库

缓存数据更新策略

先更新数据库
再令缓存失效

上一篇下一篇

猜你喜欢

热点阅读