缓存问题-基本缓存问题以及解决办法

缓存使用流程图:

image.png

缓存就像一个保护层,但是保护层也会有出问题的情况:


1、缓存穿透

问题描述:是指缓存中和数据库中都没有的数据,但是大量用户一直在请求的一个场景。比如请求ID为-1的数据。这种情况会对数据库造成很大的压力。

解决办法:针对为空的请求条件,作为key,值value为空,写入缓存,缓存有效时间设置为10秒(稍微短点)。


2、缓存雪崩

问题描述:是指缓存中大批量数据,同时到达过期时间,而导致大量的数据库查询操作,引起数据库压力过大甚至崩溃。

解决办法:缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。设置热点数据永远不过期。


3、缓存击穿

问题描述:缓存击穿其实是缓存雪崩的特例。比如热点数据的缓存突然失效,大量的用户并发请求,导致直接读取数据库,给数据库造成巨大的压力。

解决办法:使用 LRU(Least recently used,最近最少使用)算法,根据数据的历史访问记录来进行淘汰数据。相当于热点数据永不过期。也可以使用 LRU-K算法,维护两个或多个缓存队列。

LRU-K优点:需要多维护一个队列或者更多,用于记录所有缓存数据被访问的历史。只有当数据的访问次数达到K次的时候,才将数据放入缓存。当需要淘汰数据时,LRU-K会淘汰第K次访问时间距当前时间最大的数据。解决了 LRU 的缺点:由于一次的请求又放入了头部,此后再无该数据的请求,那么该数据的继续存在其实是不合理的。



本文链接地址,转载请标注: https://caohongyuan.com/article/183


0

上一篇: Linux 安装 FFmpeg 教程

下一篇: PHP 强制打印错误

提交 清空
Re: