面试题答案
一键面试什么是缓存穿透
缓存穿透指的是客户端请求的数据在缓存中不存在,并且在数据库中也不存在,导致请求直接穿透缓存到达数据库,对数据库造成压力。如果有大量这样的请求,可能会使数据库不堪重负甚至崩溃。
应对缓存穿透的策略及原理
- 布隆过滤器(Bloom Filter)
- 原理:布隆过滤器是一种概率型数据结构,它可以判断一个元素一定不存在或者可能存在。在系统初始化时,将数据库中所有可能存在的数据的 key 通过布隆过滤器的哈希函数映射到位数组中,将对应位置为 1。当有请求过来时,先经过布隆过滤器判断,如果布隆过滤器判断该 key 不存在,那么就直接返回,不会去查询数据库;如果判断可能存在,再去查询缓存和数据库。这样能在很大程度上过滤掉那些不存在的 key 的请求,避免大量无效请求穿透到数据库。
- 缓存空值
- 原理:当查询数据库发现数据不存在时,仍然在 Redis 中缓存这个 key,并设置一个较短的过期时间(防止长期占用缓存空间),其值可以设置为一个特殊标识(如 null 或 “not_exist”)。后续再有相同 key 的请求时,直接从缓存中获取这个空值并返回,不会再查询数据库,从而避免了缓存穿透。