缓存问题-基本缓存问题以及解决办法
0 911 0 2021-05-07 18:19:30
缓存使用流程图:
缓存就像一个保护层,但是保护层也会有出问题的情况:
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