数据库缓存是一个你不能忽视的两本增效技术。
它甚至可以掩盖你的数据库的缺点,并帮助你的应用程序发挥出最大的潜力。
但是,数据库缓存并不是一种单一的技术。
你可以选择一系列的策略,每种策略都有稍微不同的影响。
选择正确的策略是很重要的。
[1] 旁路缓存策略在这种策略中,缓存位于数据库的旁边。
其工作原理如下:
- 当有数据请求时,应用程序首先检查缓存
- 如果缓存命中,应用程序就从缓存中返回
- 在缓存未命中的情况下,应用程序查询数据库并返回数据
- 应用程序还将未命中的数据存储在缓存中以供未来请求
优点:非常适合读取负载重的工作负载。此外,由于缓存失效不会使系统瘫痪,所以具有更好的弹性。
缺点:缓存和数据库之间可能存在潜在的不一致性。
[2] 读取穿透策略缓存位于应用程序和数据库之间。
下面是读取穿透的过程:
应用程序会在任何读取请求中去查找缓存。如果缓存命中,数据从缓存中返回,流程结束。如果缓存未命中,则缓存从数据库中获取未命中的数据并将其返回给应用程序。优点:应用程序不必担心从数据库或缓存中获取数据,缓存会处理。
缺点:缓存和数据库之间可能存在潜在的不一致性,并且每一次全新的读取请求都需要去查询数据库。
[3] 围绕写策略与旁路缓存类似,但增加了写操作的相关上下文。
在这种策略中,所有的写入操作都会直接到数据库,而读取的数据则到缓存中。
对于缓存未命中,应用程序将从数据库中读取并更新缓存以供下次使用。
这非常适用于只写入一次且很少更新的数据(比如博客文章或静态网站)。
[4] 写入穿透策略写入穿透试图解决读取性能问题。
与其写入数据库,应用程序首先写入缓存。
然后,缓存会立即写入数据库。
这里的 "立即" 是关键。
优点:缓存总是有任何写入的数据。新的读取请求不会在缓存从主数据库请求数据时出现延迟。
缺点:额外的写入延迟,因为数据必须先进入缓存,然后才能进入数据库。
[5] 回写策略它是写入穿透策略的一种变体。
有一个关键的不同点…
在回写策略中,应用程序直接写入缓存。
然而,缓存并不会立即写入数据库,而是在一段延迟之后。
优点如果你有大量的写入请求,缓存的负担会减少。数据库的请求是批量的,从而可以提高整体的写入性能。
缺点如果缓存故障,可能存在数据丢失的风险。
这时候,你可能在想,所有这些策略听起来都很混乱,很难记住。
我完全同意你的想法。
因此,我制作了一个快速参考表,这可以帮助你快速查看这些策略。
希望这个总结能帮到你:
那么,你使用数据库缓存吗?
如果使用的话,你最喜欢的数据库缓存策略是哪一种?