缓存穿透
Redis缓存穿透是指
查询一个根本不存在的数据
,即客户端请求的数据既不在缓存中,也不在数据库中
,- 导致请求绕过缓存层直接访问数据库的现象。即每次请求都会直接打到数据库,从而绕过缓存保护机制。
- 这种现象在高并发场景下会对数据库造成巨大压力,甚至可能导致数据库崩溃。
缓存穿透的解决方案
缓存空对象(Null Object)
当数据库查询为空时,仍然将空结果(如"NULL"或空对象)缓存起来,并设置较短的过期时间。
优点
:
实现简单直接
能有效防止重复穿透
缺点
:
可能缓存大量无效key,占用内存空间
可能发生数据不一致的问题
布隆过滤器(Bloom Filter)
布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,由Burton Howard Bloom于1970年提出,用于快速判断一个元素是否可能存在于集合中。
布隆过滤器的核心原理
布隆过滤器的核心思想是通过多个哈希函数和一个位数组来表示集合元素的存在性
,具有以下显著特点:
空间效率极高
:仅需存储二进制位,无需保存元素本身
概率型判断
:可能存在误判(False Positive),但绝不会漏判(False Negative)
查询速度快
:时间复杂度为O(k),k为哈希函数数量
不支持删除
:标准布隆过滤器不支持删除操作