MST

星途 面试题库

面试题:缓存设计:如何在缓存系统与列式存储数据库协同中处理缓存穿透问题

在缓存系统与列式存储数据库协同工作场景下,假设大量请求访问缓存和数据库中都不存在的数据,从而导致大量请求直接打到数据库,造成缓存穿透现象。请描述至少两种可以有效防止缓存穿透的方法及其具体实现思路。
38.5万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

方法一:布隆过滤器(Bloom Filter)

  1. 原理:布隆过滤器是一种概率型数据结构,它可以高效地判断一个元素是否存在于一个集合中。它通过多个哈希函数将元素映射到一个位数组的不同位置,然后将这些位置置为1。当判断一个元素是否存在时,检查这些位置是否都为1,如果有一个不为1,则元素一定不存在;如果都为1,则元素可能存在。
  2. 实现思路
    • 在数据库数据加载到缓存的同时,将数据的键值通过布隆过滤器进行处理,将对应位置置为1。
    • 当有请求到来时,先通过布隆过滤器判断请求的数据是否可能存在。如果布隆过滤器判断不存在,则直接返回,不再访问数据库;如果判断可能存在,再去访问缓存和数据库。

方法二:缓存空值

  1. 原理:对于数据库中不存在的数据,在缓存中设置一个空值,这样后续相同的请求就不会穿透到数据库。
  2. 实现思路
    • 当请求访问缓存和数据库都未找到数据时,在缓存中设置一个空值,例如可以设置一个特殊的标识(如“null”),并设置一个较短的过期时间,防止占用过多缓存空间。
    • 后续相同请求到来时,先访问缓存,若获取到空值标识,则直接返回,不再访问数据库。