首页 > 数据库 >redis之缓存问题

redis之缓存问题

时间:2022-12-04 18:24:57浏览次数:44  
标签:穿透 缓存 redis DB 查询 问题 key

一 缓存穿透

1 什么是缓存穿透

缓存穿透是指查询一个在redis和DB中都不存在的数据,redis中查不到去DB查,DB查不到则不写入redis,导致每次查询这个数据都要穿过redis穿透到DB

 

2 缓存穿透产生的情况

1) 业务不合理的设计

2) 误操作: 误删除了redis和DB中的数据

3) 黑客非法请求攻击: 故意捏造大量非法请求读取不存在的业务数据

 

3 解决措施

缓存穿透是不可能自动恢复的

1) 设置空值或默认值

查询DB为空,可以给缓存设置个空值或者默认值写入redis,同时设置一个过期时间

 

2) 布隆过滤器

a) 将数据库所有的数据加载到布隆过滤器

b) 当有请求时先去布隆过滤器查询,判断查询的数据是否存在

c) 如果 判断数据不存在,那么直接返回空给客户端

d) 如果判断数据存在,那么则查询缓存或 DB

e) 将 DB 中查询的结果返回给客户端,并且缓存到 Redis 中

二 缓存击穿

1 什么是缓存击穿

缓存击穿是指热点key在过期失效的瞬间,大量请求穿过了redis直接访问DB

严重的情况甚至会造成DB服务宕机

 

2 解决措施

1) 热点数据永不过期

2) 加锁:

保证每个热点key同时只有一个线程去查询,其它线程会被阻塞,等锁释放开,缓存已有了数据,其它线程就不必访问DB,这会影响服务的高并发量

 

三 缓存雪崩

1 什么是缓存雪崩

缓存雪崩是指redis中大量key过期或者redis宕机,导致请求直接访问DB,引起DB压力过大甚至宕机

 

2 解决措施

1) 随机分散过期时间

2) 限流降级: 缓存失效后,通过加锁或队列来控制读取DB且写入redis的线程数量

3) 熔断:暂停缓存访问待实例恢复,返回预定义信息(错误页面或空值等信息)

4) 配置 redis 高可用集群

 

四 三个缓存问题之间的区别

缓存击穿是热点key过期失效的瞬间,有大量的请求穿过了redis直接访问DB

缓存穿透是请求查询不存在key,穿过了redis直接访问DB

缓存雪崩是大量key同一时间过期或者redis宕机,请求穿过了redis请求直接访问DB

缓存击穿、缓存雪崩都是DB中有数据,但redis中没有,是可以自动恢复的;缓存穿透是redis和DB都没有数据,不可能自动恢复的

标签:穿透,缓存,redis,DB,查询,问题,key
From: https://www.cnblogs.com/gudanaimei/p/16950324.html

相关文章

  • Redis 高可用之持久化
    一、Redis高可用1.1什么是高可用在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。但是在......
  • sql题解--打折日期交叉问题
    题目-打折日期交叉问题现有各品牌优惠周期表(promotion_info)如下,其记录了每个品牌的每个优惠活动的周期,其中同一品牌的不同优惠活动的周期可能会有交叉。promotion_id......
  • Win10下SDK Manager应用程序闪退问题的解决方法
    SDKManager闪退原因:未找到Java的正确路径解决办法:1、在压缩包中找到Android.bat文件,右键编辑2、打开的Android文件内容,找到如图的几行代码将上面的代码替换成:其中......
  • 记录使用 aws lambda +apigateway 过程中遇到的问题
    我希望创建一个api-gatewayhttpapi,把$default路由全发给一个lambda函数。SAM配置:...Events:ExplicitApi:#warning:createsapublicendpoint......
  • redis学习
    一.redis相关概念1.redis是一个key-value的内存数据库2.redis的优势:(1)支持丰富的数据类型(2)纯内存操作速度快(3)可持久化数据(RDBAOF)3.redis支持的基本数据类型:(1)字符......
  • 网络通信中的粘包问题
    什么是粘包?在网络传输层有TCP和UDP两种协议;如果使用TCP进行通信,则在大多数场景下是不存在丢包和包乱序问题的,因为TCP通信是可靠的通信方式,TCP栈通过序列号和包重传确认机......
  • 《一些特殊的数论函数求和问题》阅读笔记
    好至少它教会了我如何把质数求和转化成积分的渐进对着\(\pi(x)\)微就行了然后直接\(u\textdv=uv-v\textdu\)18.3k……阿巴阿巴引言这玩意挺常见的。而且你会......
  • win11系统vmware虚拟机报错“不支持嵌套虚拟化”问题解决方案汇总
    一、报错内容vmware0虚拟机中开启虚拟化主机时,报错“Error:Failureinvalidatingvirtualizationcapabilities”[root@localhost~]#rht-vmctlfullresetclassroom......
  • 【Redis】主从配置
     dockerpullredis:6.0.3 Master配置bind0.0.0.0port6378requirepass123456#关闭持久化appendonlyno#允许远程连接protected-modenoSlaveA配置......
  • 深刻理解JAVA并发中的有序性问题和解决之道
    欢迎关注专栏【JAVA并发】更多技术干活尽在个人公众号——JAVA旭阳问题Java并发情况下总是会遇到各种意向不到的问题,比如下面的代码:intnum=0;booleanready=......