一、缓存和数据库间数据一致性问题

在高并发的场景下,无论是先删除缓存后更新数据库,还是先更新数据库还是删除缓存,都会出现不一致的问题,所以在强一致的业务上不建议使用缓存。

场景1:先删除缓存,再更新数据库

分析:并发不高时,如果删除缓存失败,那么后面就不会更新数据库,这种情况缓存和数据库是一致的。

如果删除缓存操作成功,更新数据库失败,那么后面业务查询缓存时,发现没有,就会查数据库并把数据缓存到Redis,这种情况缓存和数据库也是一致的。

当有上亿并发的时候,如果删除缓存后,又来了一个线程查询,这是还没更新到数据库,那么新线程会缓存就数据,最终导致缓存和数据库数据不一致问题。

场景2:先更新数据库,再删除缓存

分析:如果更新失败,那么业务不会继续删除缓存操作,缓存和数据库数据是一致的。

如果更新数据库成功,然后删除缓存失败,那么后面有线程来查询时,会出现缓存中是旧数据,出现数据不一致问题。

这个方案原则上不推荐,建议使用场景1的方案。

解决方案

针对场景1的解决方案:

1、把删除缓存和更新数据库作为一个原子操作,加更新锁。其他线程查询数据时,如果更新锁存在,则查询等待。

直到更新完成,再执行查询任务,这里要注意更新锁的超时释放问题,因为有可能更新操作异常,导致业务退出,或者jvm挂了,更新锁一直没释放。可以结合业务更新的时长,设置超时时间,自动释放锁,比如500ms,500ms正常更新操作会完成。

二、雪崩

雪崩是指缓存在同一时间大面积失效,从而导致业务去查数据库DB,导致数据库负载过高,可能造成数据库宕机。

解决方案:

1、对不同的key设置不同的过期时间(不规则的key)。

2、对于固定的热key,业务上使用定时器提前更新,如果是30分钟失效,那么每29分钟或者更短的时间定期刷新。

三、击穿

穿透是指业务查询一个不存在的数据,这样每次缓存都不能命中,而去查询数据库,导致数据库压力大。

解决方案:

1、业务代码上缓存一个空对象,并设置过期时间。

2、使用布隆过滤器

Redis (三)雪崩和穿透相关推荐

  1. Redis面试 - redis 的雪崩和穿透?

    Redis面试 - redis 的雪崩和穿透? 面试题 了解什么是 redis 的雪崩和穿透?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透? 面试官心理分析 其实 ...

  2. redis缓存雪崩、穿透、击穿概念、布隆过滤器小结及解决办法

    判存业务 redis缓存雪崩.穿透.击穿概念及解决办法 什么是 概念: 1.缓存雪崩 对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意 ...

  3. redis的雪崩、穿透、击穿解析

    雪崩 redis中的key在某个时间段内,大量的失效,此时有大量请求查询这些key,那么这些请求就会去到后端数据库查询,后端数据库压力过大导致数据库宕机,最后系统崩溃.(雪崩的时候没有一片雪花是无辜的 ...

  4. 解决Redis缓存雪崩、穿透、并发、预热、击穿、热点Key等问题

    一.缓存雪崩 数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机. 比如一个雪崩的简单过程: 1.redis集群大面积故障 2.缓 ...

  5. Redis缓存雪崩、穿透、击穿,布隆过滤器,分布式锁详解

    缓存雪崩 在某一个时间存在大量的缓存key失效 解决办法 1.有效期一直---->给每一个数据加上水机有效期 2.redis挂掉了----->使用redis集群,分摊key的存储 引出re ...

  6. 【redis】redis的雪崩和穿透

    1.什么是缓存穿透 一般的缓存系统,都是按照key值去缓存查询,如果不存在对应的value,就应该去DB中查找 .这个时候,如果请求的并发量很大,就会对后端的DB系统造成很大的压力.这就叫做缓存穿透. ...

  7. redis的雪崩和穿透

    一. 缓存雪崩 缓存挂了以后,大量请求拖垮后面的数据库. 如何解决缓存雪崩? 1. 事前 redis高可用,主从+哨兵,rediscluster,避免全盘崩溃 2. 事中 本地ehcache缓存+hy ...

  8. redis 的雪崩和穿透

    缓存雪崩 对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机.缓存挂了,此时 1 秒 5000 个请求全部落数据库,数据 ...

  9. redis的雪崩 击穿 穿透以及解决方案

    雪崩:众多缓存数据同一时间到期导致大量请求同时达到数据库,致使数据库超负荷. 解决方案: 1.数据对时间不敏感:到期时间加一个随机值 2.数据必须在某一时刻到期:客户端请求的时候加个延迟. 击穿:某一 ...

  10. redis 的雪崩和穿透?

    https://blog.csdn.net/Aria_Miazzy/article/details/88066975 转载于:https://www.cnblogs.com/tonggc1668/p/ ...

最新文章

  1. linux路由内核实现分析 四,linux路由内核实现分析(二)---FIB相关数据结构(4)
  2. Centos 6.5 python 2.6.6 升级到 2.7
  3. HDU 1108.最小公倍数-辗转相除法
  4. flex 文字竖排_flex button字竖排展示
  5. Ubuntu中给eclipse和android studio添加桌面快捷图标
  6. 网络知识:说说我们常听说的网络攻击是怎么回事?
  7. Bootstrap3 缩写词样式
  8. NOIP2011题目简析
  9. OpenCV双边滤波解决实现图像的美白
  10. 哈理工OJ 1562 字符统计器(水模拟)
  11. hcna华为认证网络工程师
  12. 迅雷开放离线下载试用,每天8000名额,速度来抢!
  13. POJ 1265 Area (皮克公式+多边形面积)
  14. 我为什么觉得程序员是个高危职业
  15. react native使用echarts图表
  16. 第二届中国(泰州)国际装备高层次人才创新创业大赛
  17. [N1CTF 2022] solve_pow,baby_N1ES
  18. [electron]Electron安装报错connect ETIMEDOUT
  19. Create WAP Push SMS Messages
  20. PTA评测系统的常见问题

热门文章

  1. html 权限模块设置,角色权限设置.html
  2. 专访探真科技:云原生安全与业务迭代平衡术
  3. CRUD 还能这么玩?
  4. 三个锦囊:剖析 5G 安全难题
  5. 我,对安全研究专家下手的黑客!
  6. 阿里巴巴成立云原生技术委员会,云原生升级为阿里技术新战略!
  7. 潘石屹没跑,他去学 Python 了
  8. 真的,没人能逃开“真香定律”
  9. 程序员之痛:六次创业五回失败了
  10. iPhone、iPad明年或采用USB-C接口;虎牙回应央视点名网课内容充斥广告;Rust 1.44.0 发布| 极客头条...