缓存穿透,雪崩,击穿
缓存穿透 缓存穿透指的是:一个缓存和数据库中都不存在的数据,由于数据库无法写入缓存,导致频繁请求直接打到数据库,从而造成数据库压力过大甚至被“打穿”。 常见的解决方法包括:缓存空值 或 布隆过滤器。 布隆过滤器由一个全 0 的位图数组和 n 个哈希函数组成。当一个数据在请求缓存前,会先经过布隆过滤器。过滤器会通过 n 个哈希函数计算出 n 个哈希值,再分别对数组长度取模,并将对应的数组下标置为 1。 查询时,只需要查看位图数组中这 n 个位置是否全部为 1: 若存在某个位为 0,则说明该数据一定不存在于数据库中; 若全部为 1,则说明该数据可能存在,但不一定真的存在,因为可能出现哈希碰撞。 因此,布隆过滤器判断“存在”时并不能保证数据真的存在,但判断“不存在”时一定准确。 缓存雪崩 缓存雪崩指的是:大量的缓存 Key 在同一时间失效,或者 Redis 服务器宕机,导致所有请求同时打到数据库,造成数据库瞬时压力过大,甚至宕机的情况。 解决方法: 为缓存设置 固定过期时间 + 随机过期时间,让不同 Key 的过期时间错开,避免在同一时间集中失效。 ...



