更新时间:2023-03-09 来源:黑马程序员 浏览量:
缓存穿透(Cache Penetration)指的是查询一个不存在的数据,由于缓存没有命中,请求会直接穿透到数据库,导致数据库压力过大,甚至可能造成宕机。
缓存击穿(Cache Miss)指的是某一个热点key在缓存中过期或者被清除,此时大量请求涌入,由于缓存中没有该key的缓存数据,请求会直接穿透到数据库,导致数据库压力过大,甚至可能造成宕机。
缓存雪崩(Cache Avalanche)指的是缓存中大量的数据在同一时间过期失效,导致大量的请求涌入数据库,导致数据库压力过大,甚至可能造成宕机。
以下是针对这三种情况的解决方法:
·在应用程序中添加合适的校验机制,过滤掉不存在的key,如将所有请求数据的唯一标识符(如id)通过一个哈希函数映射为一个固定的字符串,并判断字符串是否合法。
·对于查询结果为空的情况,可以将其缓存到缓存中,但是有效期较短,比如5分钟,防止恶意攻击。
·使用互斥锁或分布式锁,防止大量请求同时访问数据库。
·使用热点数据预加载,即在缓存过期之前,提前异步地加载数据,确保缓存一直有数据。
·使用不同的过期时间,避免大量的数据在同一时间过期失效。
·使用缓存的异步刷新机制,保证缓存中的数据不会同时过期失效。
·使用多级缓存,如本地缓存、分布式缓存和全局缓存,使得缓存的失效不会同时影响所有缓存节点。