面试题答案
一键面试缓存穿透定义
缓存穿透指的是客户端请求的数据在缓存中和数据库中都不存在,每次请求都会直接打到数据库,若有大量此类请求,会对数据库造成巨大压力,甚至导致数据库崩溃。
解决方案及原理
- 布隆过滤器
- 原理:布隆过滤器是一个很长的二进制向量和一系列随机映射函数。当一个元素被加入集合时,通过多个哈希函数将其映射到布隆过滤器的不同位置,并将这些位置的二进制值设为1。查询时,元素通过同样的哈希函数映射,若对应位置不全为1,则该元素一定不存在;若全为1,大概率存在(可能存在误判)。使用布隆过滤器时,在请求到达时,先通过布隆过滤器判断数据是否存在,若不存在则直接返回,避免查询数据库。
- 缓存空值
- 原理:当查询数据库发现数据不存在时,将空值缓存起来,并设置较短的过期时间。后续相同请求过来时,先查缓存,命中缓存空值则直接返回,不再查询数据库。过期时间设置较短是为了避免在数据库数据新增后,因缓存空值存在导致长时间无法查询到新数据。