Redis之缓存穿透?怎么解决?

面试官:什么是缓存穿透?怎么解决?

**候选人:**嗯~ ,缓存穿透是指查询一个一定不存在的数据。如果从DB查不到数据则不写入缓存,这将导致每次访问这个不存在的数据都要到DB去查询,高并发情况下DB可能会挂掉。这就是缓存穿透。

解决方案,我们通常使用布隆过滤器来解决它。

发生场景:1误删了redis和DB中数据,但前端还存在,访问时查不到

2恶意攻击,有人故意利用不存在的key发送大量请求

面试官:你能介绍下布隆过滤器吗?

**候选人:**嗯,是这样~

布隆过滤器主要是用来检索一个元素是否在一个集合中。我们当时使用的是redisson实现的布隆过滤器。

首先它底层使用了bitmap数据结构(位图),其实就是一个二进制数组,初始元素都为0。当我们存一个key时,会经过3次hash计算,(模于数组长度)找到对应数组下标,再把数组中0改为1,这样的话,三个数组位置就能标明一个key的存在。查询某个key是否存在的过程也一样。

缺点:布隆过滤器会存在误判情况,数组长度越长,误判率越低。一般我们会设置这个误判率不超过5%。有一点声明一下:布隆过滤器可以确定某个key一定不存在,但不能确定某个key一定存在。

相关推荐
七夜zippoe1 天前
数据库事务隔离级别与Spring传播行为深度解析
java·数据库·spring·mvcc·acid·myslq
VX:Fegn08951 天前
计算机毕业设计|基于springboot + vue智慧养老院管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
浩瀚之水_csdn1 天前
python字符串解析
前端·数据库·python
luffy54591 天前
Windows下安装postgresql扩展pg_vector实现向量存储
数据库·postgresql
列御寇1 天前
MongoDB分片集群——mongos组件(mongos进程)
数据库·mongodb
lytao1231 天前
MySQL高可用集群部署与运维完整手册
运维·数据库·mysql·database
TDengine (老段)1 天前
嘉环科技携手 TDengine,助力某水务公司构建一体化融合平台
大数据·数据库·科技·物联网·时序数据库·tdengine·涛思数据
dajun1811234561 天前
跨部门工作流泳道图在线绘制工具 PC
大数据·数据库·人工智能·信息可视化·架构·流程图
菩提小狗1 天前
SQL注入之sqlmap|web安全|渗透测试|网络安全
数据库·sql·web安全
HZZD_HZZD1 天前
喜讯|合众致达成功中标G312线傅家窑至苦水公路机电工程FKJD-2标水电表项目
大数据·数据库·人工智能