面试题答案
一键面试缓存穿透理解
缓存穿透指查询一个根本不存在的数据,由于缓存中没有,会直接查询数据库,若每次查询不存在的数据都这样,会给数据库带来巨大压力。因为缓存无法拦截这类查询请求,使得请求如同“穿透”了缓存,直接到达数据库。
应对策略及原理
- 布隆过滤器(Bloom Filter)
- 原理:布隆过滤器是一个很长的二进制向量和一系列随机映射函数。当一个元素加入集合时,通过多个哈希函数计算出元素在二进制向量中的位置,并将对应位置设为1。查询时,对元素再次进行相同的哈希计算,检查对应位置是否都为1,如果有一个位置不为1,则该元素一定不存在;如果都为1,则该元素可能存在(存在一定误判率)。在缓存穿透场景下,将数据库中已存在的数据通过布隆过滤器计算后放入布隆过滤器中,当查询时先经过布隆过滤器,如果布隆过滤器判断该数据不存在,则直接返回,不会查询数据库,从而避免缓存穿透。
- 缓存空值
- 原理:当查询数据在数据库中不存在时,仍然在缓存中设置一个空值(例如空字符串、null等),并设置一个较短的过期时间。下次再查询相同数据时,缓存中就有值(虽然是空值),不会再穿透到数据库。过期时间设置较短是为了避免在数据库中数据新增时,因为缓存空值一直存在而无法查询到新数据。