java高并发(二十一)高并发场景下缓存常见问题
缓存一致性
当数据实时性要求很高时,需要保证缓存中的数据与数据库中的数据一致,缓存节点与副本中的数据一致,不能出现差异现象,这就比较依赖缓存的过期和更新策略了。一般会在数据发生更改的时候,主动跟新缓存中的数据或者移除对应的缓存,这时可能会出现缓存一致性的问题。
现象一:更新数据库成功,更新缓存失败,数据不一致。
现象二:更新缓存成功,更新数据库失败,数据不一致。
现象三:更新数据库成功,淘汰缓存失败,数据不一致。
现象四:淘汰缓存成功,更新数据库失败,查询缓存miss。
缓存并发问题
缓存过期后将尝试从后端的数据库获取数据,这时一个看似合理的流程,但是在高并发场景下,有可能有多个请求从数据库中请求数据,对后端数据库造成极大的冲击,甚至导致雪崩现象。此外当某个缓存的Key被更新时,同时也可能被大量请求获取,这也会导致一致性的问题。如何避免类似的问题?可以通过锁的机制来避免。在缓存更新或更新的情况下,先尝试获取锁,当更新或者从数据库获取数据完成后,在释放锁。其他请求只要牺牲一定的等待时间就可以从缓存中继续获取数据。
缓存穿透问题
在高并发场景下,如果某个Key被高并发访问,没有被命中,出于对容错性的考虑,会尝试从后端数据库中获取,从而导致大量的请求达到数据库,而该Key对应的数据本身就是空的情况下,就导致了数据库中并发的去执行了很多不必要的查询操作,从而导致了巨大的冲击和压力。这种情况下可以通过以下几种方式来避免缓存穿透问题:
- 缓存空对象:对查询结果为空的对象,也进行缓存,如果是集合的话,可以缓存一个空集合
- 单独过滤处理:对所有可能数据为空的Key,进行统一的存放。在请求前做拦截,这样避免请求穿透到后端数据库。这种方式实现起来相对复杂。比较适合命中不高但是更新频繁的数据
缓存的雪崩现象
请求都到后台数据库导致系统崩溃
java高并发(二十一)高并发场景下缓存常见问题相关推荐
- 读数据库遇到空就进行不下去_如何解决高并发场景下缓存+数据库双写不一致问题?...
推荐阅读: 一只Tom猫:手撕分布式技术:限流.通讯.缓存,全部一锅端走送给你!zhuanlan.zhihu.com 一只Tom猫:MySQL复习:20道常见面试题(含答案)+21条MySQL性能调 ...
- 【高并发】亿级流量场景下如何实现分布式限流?看完我彻底懂了!!(文末有福利)
写在前面 在互联网应用中,高并发系统会面临一个重大的挑战,那就是大量流高并发访问,比如:天猫的双十一.京东618.秒杀.抢购促销等,这些都是典型的大流量高并发场景.关于秒杀,小伙伴们可以参见我的另一篇 ...
- Java架构-每秒上千订单场景下的分布式锁高并发优化实践!
"上一篇文章我们聊了聊Redisson这个开源框架对Redis分布式锁的实现原理,如果有不了解的兄弟可以看一下:<拜托,面试请不要再问我Redis分布式锁实现原理>. 今天就给大 ...
- 「高并发」亿级流量场景下如何实现分布式限流?
分布式限流的关键就是需要将限流服务做成全局的,统一的.可以采用Redis+Lua技术实现,通过这种技术可以实现高并发和高性能的限流. Lua是一种轻量小巧的脚本编程语言,用标准的C语言编写的开源脚本, ...
- 高并发场景下缓存的常见问题
作者介绍: 丁浪,非著名架构师.关注高并发.高可用的架构设计,对系统服务化.分库分表.性能调优等方面有深入研究和丰富实践经验.热衷于技术研究和分享. 声明:版权归丁浪作者本人所有,转载请联系作者本人 ...
- 本地缓存需要高时效性怎么办_缓存在高并发场景下的常见问题
缓存一致性问题 当数据时效性要求很高时,需要保证缓存中的数据与数据库中的保持一致,而且需要保证缓存节点和副本中的数据也保持一致,不能出现差异现象.这就比较依赖缓存的过期和更新策略.一般会在数据发生更改 ...
- 缓存在高并发场景下的常见问题
缓存一致性问题 当数据时效性要求很高时,需要保证缓存中的数据与数据库中的保持一致,而且需要保证缓存节点和副本中的数据也保持一致,不能出现差异现象.这就比较依赖缓存的过期和更新策略.一般会在数据发生更改 ...
- Java 编程问题:十一、并发-深入探索
原文:Java Coding Problems 协议:CC BY-NC-SA 4.0 贡献者:飞龙 本文来自[ApacheCN Java 译文集],自豪地采用谷歌翻译. 本章包括涉及 Java 并发的 ...
- 队列处理高并发_高并发场景下缓存处理的一些思路
在实际的开发当中,我们经常需要进行磁盘数据的读取和搜索,因此经常会有出现从数据库读取数据的场景出现. 但是当数据访问量次数增大的时候,过多的磁盘读取可能会最终成为整个系统的性能瓶颈,甚至是压垮整个数据 ...
最新文章
- Java 必须掌握的 20+ 种 Spring 常用注解
- mysql授权其他用户导出数据_mysql创建账号、授权、数据导出、导入
- 【React、Vue 、 Angular 共分天下,2018首将会是谁?】
- Linux编译动态链接库
- initWithCoder: 与initWithFrame:
- Mantis-如何自定义流程状态
- 32年寻获上帝粒子,华人女学者自述高能人生故事
- IE、Chrome、Firefox 三大浏览器对比
- linux信号量配合共享内存应用分析(详解)
- 用友T3 反结账反记账
- Linux聊天服务器
- 航信税控系统 - 安装分析(一)
- 自定义fingerprint特征
- mysql未开启binlog恢复数据_MYSQL bin_log 开启及数据恢复
- 30分钟搞定后台登录界面(103个后台PSD源文件、素材网站)(转)
- ROS综合学习记录(一)---cmd_vel转换为阿克曼模型的速度变换
- 我的GH60 - 极客定制GK61XS : eclipse软件开发常用快捷键新增绑定 (亦适用于不使用方向键/HOME/END情况的大牛)
- 图形化开放式生信分析系统开发 - 7 分析报告的模板定制与自动生成
- 为程序选择在哪个cpu上跑
- 各种塑料材质说明,哪些可以加热,哪些可以放入微波炉
热门文章
- 使用Gridview绑定数据库中的图片
- ASP.NET配置错误页面浅析
- mysql主从同步从库上Slave_IO_Running: Connecting问题
- TP查看已部署的TP框架的版本
- 预处理器命令必须作为第一个非空白空间启动_第三章 图形处理器(上)
- CentOs7 无可用“Chinese Support“
- linux的无密码登录,linux 无密码登录
- oracle子查询子查询,Oracle 单行子查询和多行子查询
- 清空mysql一个库中的所有表_mysql怎样清空一个数据库中的所有表_MySQL
- mvn项目Quartz简单上手