1:缓存设计的三个常问点缓存穿透:查一个压根不存在的数据,每次都打到数据库。解决办法是缓存空值,或者用布隆过滤器拦截。缓存击穿:热点 key 突然过期,大量请求同时打到数据库。解决办法是用互斥锁,只让一个请求去加载数据,其他请求等着。缓存雪崩:大批 key 同时过期,数据库瞬间被打爆。解决办法是给过期时间加个随机值,让 key 分散过期。1:布隆过滤器的原理是什么?布隆过滤器就是一个bit数组。一个 key 进来,用N 个不同哈希函数算出 N 个位置。把这 N 个位置都设为 1。判断时,再哈希一遍,看这 N 个位置是不是全为 1 如果都是1,说明有,去请求Redis,可能存在误判 如果有0,说明一定没有,拦截。2:缓存击穿的解决方案 加互斥锁,第一个拿到锁的线程先拿缓存、再拿数据放到缓存中。其他拿到锁的,直接从缓存中拿即可。2:分布式锁的坑1:锁要设过期时间,不然进程挂了锁就死了锁