MST

星途 面试题库

面试题:Redis与MySQL数据同步中,如何处理Redis缓存穿透问题以保障数据同步安全性

在Redis与MySQL进行数据同步场景下,缓存穿透可能导致非法请求直接穿透Redis访问MySQL,阐述你对解决缓存穿透问题的理解,比如可以采用哪些方法避免该问题影响数据同步的安全性,每种方法的原理是什么?
19.2万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

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必须是正整数,接口层对传入参数进行校验,非正整数的请求直接被拒绝。