面试题答案
一键面试- 布隆过滤器(Bloom Filter):
- 原理:布隆过滤器是一种概率型数据结构,它可以高效地判断一个元素是否在一个集合中。在处理缓存穿透问题时,将数据库中已有的数据主键(如用户ID、商品ID等)添加到布隆过滤器中。当有请求到达时,先通过布隆过滤器判断该请求的数据主键是否存在。如果布隆过滤器判断不存在,那么就直接返回,不再查询数据库,从而避免了对不存在数据的无效查询穿透到数据库。虽然布隆过滤器存在一定的误判率(即判断存在但实际不存在),但误判率可以通过合理设置布隆过滤器的参数来控制在较低水平。
- 缓存空值:
- 原理:当请求的数据在数据库中不存在时,仍然在Redis中缓存这个空值(如缓存一个特殊的标记表示数据不存在),并设置一个较短的过期时间。这样后续相同的请求过来时,直接从Redis中获取到这个空值,而不会穿透到MySQL。设置较短过期时间是为了防止在数据实际插入数据库后,因为缓存空值一直存在而导致新数据无法被正确读取。