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

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

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

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

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

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

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

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

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

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

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

相关推荐
zuoerjinshu1 小时前
sql实战解析-sum()over(partition by xx order by xx)
数据库·sql
NocoBase2 小时前
【2.0 教程】第 1 章:认识 NocoBase ,5 分钟跑起来
数据库·人工智能·开源·github·无代码
Hoshino.414 小时前
基于Linux中的数据库操作——下载与安装(1)
linux·运维·数据库
Oueii5 小时前
Django全栈开发入门:构建一个博客系统
jvm·数据库·python
未来龙皇小蓝6 小时前
【MySQL-索引调优】11:Group by相关概念
数据库·mysql·性能优化
2401_831824966 小时前
使用Fabric自动化你的部署流程
jvm·数据库·python
njidf6 小时前
Python日志记录(Logging)最佳实践
jvm·数据库·python
twc8296 小时前
大模型生成 QA Pairs 提升 RAG 应用测试效率的实践
服务器·数据库·人工智能·windows·rag·大模型测试
@我漫长的孤独流浪6 小时前
Python编程核心知识点速览
开发语言·数据库·python
2401_851272996 小时前
实战:用Python分析某电商销售数据
jvm·数据库·python