面试题答案
一键面试缓存穿透定义
缓存穿透指客户端请求的数据在缓存中不存在并且在数据库中也不存在,导致请求直接穿透缓存到达数据库,若这类请求量很大,会对数据库造成巨大压力,甚至拖垮数据库。
解决方案及优缺点分析
- 布隆过滤器(Bloom Filter)
- 原理:布隆过滤器是一个很长的二进制向量和一系列随机映射函数。当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。查询时,只要看看这些点是不是都是1就(大约)知道集合中有没有它了。如果这些点有任何一个0,则被查询元素一定不在;如果都是1,则被查询元素很可能在。
- 优点:能高效判断数据是否存在,占用内存空间小,查询效率高,能在一定程度上阻止非法请求穿透到数据库。
- 缺点:存在误判率,即可能把不在集合中的元素误判为在集合中;布隆过滤器维护比较复杂,新增元素需要重新计算哈希值,动态调整大小较麻烦。
- 缓存空值
- 原理:当查询数据在数据库中不存在时,仍然将这个空值缓存起来,设置一个较短的过期时间。后续相同查询就会直接从缓存中获取空值,而不会再查询数据库。
- 优点:实现简单,不需要额外引入其他组件,对现有系统侵入性小。
- 缺点:会额外占用缓存空间,可能导致缓存空间浪费;若缓存过期时间设置不当,可能仍然会有短暂的缓存穿透问题。而且对于更新频繁的数据,缓存空值会频繁更新缓存,影响性能。