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

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

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

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

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

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

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

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

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

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

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

相关推荐
yashuk7 分钟前
Redis的安装教程(Windows+Linux)【超详细】
linux·数据库·redis
lzp079114 分钟前
mysql之联合索引
数据库·mysql
qq56801807615 分钟前
【MySQL】超详细MySQL常用日期格式转换函数、字符串函数、聚合函数(最新版)
数据库·mysql
中杯可乐多加冰26 分钟前
Serverless 时代的内核革命——华为 openYuanrong 深度解析 异构多级缓存与 D2D 高速传输实测
缓存·华为·开源·serverless·openyuanrong
逆境不可逃28 分钟前
【从零入门23种设计模式21】行为型之空对象模式
java·开发语言·数据库·算法·设计模式·职场和发展
灰阳阳33 分钟前
Redis的缓存机制
数据库·redis·缓存
wenlonglanying33 分钟前
【Redis】设置Redis访问密码
数据库·redis·缓存
盐水冰41 分钟前
【烘焙坊项目】后端搭建(6)- 店铺状态设置
java·redis
@insist12341 分钟前
软件设计师-数据库技术基础:系统组成、三级模式两级映像与数据模型核心考点解析
数据库·软考·软件设计师
咖啡の猫1 小时前
Redis命令-List命令
windows·redis·list