当前位置: 首页 > news >正文

一篇搞定分布式缓存

  • 缓存雪崩
缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间所有原本应该访问缓存的请求都 去查询数据库了,而对数据库 CPU 和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列 连锁反应,造成整个系统崩溃。一般有三种处理办法:
1. 一般并发量不是特别多的时候,使用最多的解决方案是加锁排队。
2. 给每一个缓存数据增加相应的缓存标记,记录缓存的是否失效,如果缓存标记失效,则更新数据缓存。
3. 为 key 设置不同的缓存失效时间。
  • 缓存穿透
缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在 缓存中找不到,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次无用的查询)。这样请 求就绕过缓存直接查数据库,这也是经常提的缓存命中率问题。
有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用 布隆过滤器 ,将所有可能存在的数据哈 希到一个足够大的 bitmap 中,一个一定不存在的数据会被这个 bitmap 拦截掉,从而避免了对底层存 储系统的查询压力。另外也有一个更为简单粗暴的方法, 如果一个查询返回的数据为空(不管是数据不 存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。 通过这个直接设置的默认值存放到缓存,这样第二次到缓冲中获取就有值了 ,而不会继续访问数据库。
  • 缓存预热
缓存预热就是系统上线后,将相关的缓存数据直接加载到缓存系统。这样就可以避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据!
  • 缓存更新
缓存更新除了缓存服务器自带的缓存失效策略之外(Redis 默认的有 6 中策略可供选择),我们还可以 根据具体的业务需求进行自定义的缓存淘汰,常见的策略有两种:
(1)定时去清理过期的缓存;
(2)当有用户请求过来时,再判断这个请求所用到的缓存是否过期,过期的话就去底层系统得到新数 据并更新缓存。
  • 缓存降级
当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然 需要保证服务还是可用的,即使是有损服务。系统可以根据一些关键数据进行自动降级,也可以配置开 关实现人工降级。降级的最终目的是保证核心服务可用,即使是有损的。而且有些服务是无法降级的 (如加入购物车、结算)。

相关文章:

  • 低空经济20人|卓翼智能任雪峰:以技术驱动市场,引领无人机细分领域创新
  • 找出单身狗1,2
  • 航测管家:智能化革新航测作业流程
  • bugku-misc隐写
  • 混合云构建-VPN打通阿里云和AWS云
  • 20 卷积层里的填充和步幅【李沐动手学深度学习v2课程笔记】
  • 无限debugger的几种处理方式
  • Node.js与Webpack笔记(一)
  • 【Oracle不停库迁移, 迁移完成无法启动】
  • 开发一套小程序所需的费用取决于多个因素
  • C++指针(四)万字图文详解!
  • 【C++】C++模板基础知识篇
  • Java实现归并排序算法
  • 图数据库 之 Neo4j - 应用场景4 - 反洗钱(9)
  • 大模型日报|今日必读的7篇大模型论文
  • ES10 特性的完整指南
  • github指令
  • Java深入 - 深入理解Java集合
  • js ES6 求数组的交集,并集,还有差集
  • ubuntu 下nginx安装 并支持https协议
  • Vue ES6 Jade Scss Webpack Gulp
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 初识 webpack
  • 从零开始的无人驾驶 1
  • 代理模式
  • 好的网址,关于.net 4.0 ,vs 2010
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 判断客户端类型,Android,iOS,PC
  • 十年未变!安全,谁之责?(下)
  • 使用 @font-face
  • 手写双向链表LinkedList的几个常用功能
  • 微信小程序:实现悬浮返回和分享按钮
  • 用简单代码看卷积组块发展
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 国内开源镜像站点
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​一些不规范的GTID使用场景
  • # C++之functional库用法整理
  • #Linux(帮助手册)
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #pragma data_seg 共享数据区(转)
  • $jQuery 重写Alert样式方法
  • (06)金属布线——为半导体注入生命的连接
  • (1)(1.13) SiK无线电高级配置(六)
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (理论篇)httpmoudle和httphandler一览
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (一一四)第九章编程练习
  • (转)jdk与jre的区别
  • (转)ObjectiveC 深浅拷贝学习
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (转载)PyTorch代码规范最佳实践和样式指南
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)