美文网首页
《全栈工程师修炼指南》学习笔记 17

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

作者: VioletJack | 来源:发表于2023-02-19 10:23 被阅读0次

缓存存在的一些问题

缓存穿透

缓存穿透,指的是某些情况下,大量对于同一个数据的访问,经过了缓存屏障,但是缓存却未能起到应有的保护作用。

缓存穿透实例

查询一些数据库中没有的数据,这样就不会缓存,每次都去查询数据库。
某个数据尚未被缓存时,并发发送大量同一数据的请求,那么这些请求可以同时到数据库层。

缓存穿透解决方案

控制流量,限制对于同一数据同一时间的访问量。
缓存预热,主动将缓存填充好。

缓存雪崩

原本起到屏障作用的缓存,如果在一定时间段内,对于大量的请求访问失效,即失去了屏障系统,造成它后方的系统压力过大,引起系统过载、宕机的问题。

缓存雪崩实例

机房断电导致缓存失效,于是大量请求冲击数据库导致宕机。
缓存集中在某个时间段集体过期,请求就都会落到了数据库上。

缓存雪崩解决方案

限流,只接纳能够承载的量。
预热,主动往内存中加载一定的热点数据。
避免缓存结束时间太过集中,让它们可以均匀的过期。

缓存容量失控

缓存容量失控实例

将数据暂时存到一个链表中,每十分钟集中写入数据库,并清空链表。
如果短时间内出现大量事件,链表会变得非常大。缓存容量不可控。
清空链表任务的行为首先是个异步行为,而且执行过程中可能会出现异常。

缓存容量失控解决方案

需要基于容量本身来直接控制。

LRU 缺陷

LRU 指的是最少最近使用算法,是缓存队列最常见的算法。
LRU 的原理是维护一个限定最大容量的队列,队列头部总是放置最近访问的元素,而超过容量限制的元素将会被淘汰。

LRU 缺陷实例

某段时间突然缓存和很多冷门的数据,导致一些热门数据超出容量限制被淘汰。这时候大量热门数据的请求同时到来,在没有缓存的情况下直接访问数据库。

LRU 缺陷解决方案

LRU-K 算法:主缓存队列排的是第K次访问的元素,如果访问次数小于K,会在另外一个低级队列中维护。保证了只有达到一定访问量才能被送到主 LRU 队列中去。

缓存框架

集成方式

编程方式
方法注解
配置文件的注入
Web 容器的 Filter
页面模板中的 Cache 标签

核心要素

缓存数据的生命周期管理
数据变动规则
核心 API
用户侧 API

相关文章

网友评论

      本文标题:《全栈工程师修炼指南》学习笔记 17

      本文链接:https://www.haomeiwen.com/subject/lysikdtx.html