面试题答案
一键面试1. 布隆过滤器(Bloom Filter)
- 原理:布隆过滤器是一种概率型数据结构,它通过多个哈希函数将一个元素映射到一个位数组的不同位置,并将这些位置置为1。当查询一个元素时,通过相同的哈希函数计算其在位数组中的位置,如果这些位置上的值都为1,则认为该元素可能存在;若有任何一个位置为0,则该元素一定不存在。在Redis与MySQL数据同步场景中,在请求到达Redis前,先经过布隆过滤器。如果布隆过滤器判断数据不存在,就直接返回,不再查询Redis和MySQL,避免非法请求穿透到MySQL。
2. 缓存空值
- 原理:当查询数据在MySQL中不存在时,也将这个空值缓存到Redis中,并设置一个较短的过期时间。这样,后续相同的非法请求到达时,在缓存过期前,直接从Redis中获取到空值,不会穿透到MySQL。例如,查询一个不存在的用户ID,将这个ID对应的空值缓存到Redis,下次再查询这个ID,直接从Redis返回空值,减少对MySQL的无效查询。
3. 接口层校验
- 原理:在应用层接口处对请求参数进行严格校验,比如检查参数格式是否合法、是否在合理范围内等。对于不合法的请求,直接在接口层拦截,不允许其进入到查询Redis和MySQL的流程,从而避免缓存穿透。例如,某个接口要求传入的用户ID必须是正整数,接口层对传入参数进行校验,非正整数的请求直接被拒绝。