自强学堂

文中的cache指缓存,比如redis,db指数据库,比如mysql。

一、缓存的三种模式

这里主要指的是应用代码对 cache 和 db 中数据的维护方式。

1.1 应用代码同时更新 cache 和 db

a)数据写入流程

b)数据读取流程

1.2 应用代码只更新 cache,cache 负责同步更新 db

此时可以将 cache 和 db 看成一个整体,db 自己维护 cache。

1.3 应用方代码更新缓存,另外将 cache 中数据定期更新到 db

类似于 Linux 文件系统中的 page cache。

这个可能会导致数据不一致,甚至数据丢失。

二、缓存使用要注意的问题

当缓存使用不当时,可能会导致请求瞬间打到db,db 扛不住挂掉。

常见的有以下三种问题。

2.1 缓存穿透

概念说明:指 cache 和 db 中都没有数据,读完 cache 没有,再读 db 还是没有,每次请求到 cache 和 db。

解决方法:

a).拦截非法请求,比如不正常的 id 请求直接拒绝。

b).没有数据时也 cache 下,过期时间可设置短点,不把过多请求打到 db 去。

c).使用 Write Behind Caching 模式,命中不了 cache 不读取 db。这时需要注意 cache 大小,此时的数据都存在了内容。

d).采用布隆过滤器,不存在的 key 直接过滤;布隆过滤器判断存在,则数据可能存在,如果判断不存在,则肯定不存在。

一般建议前两种,实现起来比较简单

2.2 缓存击穿

概念说明:一般是少量热点数据过期(比如微博热搜),导致大量请求查 cache 没有,又查 db。

解决方法:

a)热点 key 永不过期,异步更新。

b)更新热点 key 时加锁,同一个 key 最好只有一个请求打到 db。

c)接口限流,熔断、降级。

2.3 缓存雪崩

概念说明:大量 cache 数据同时过期,导致大量请求打到 db。

解决方法:

a).热点 key 永不过期,异步更新。

b).防止同时大量数据过期,cache 过期时间随机抖动下。

mysql数据库击穿_缓存穿透、击穿、雪崩区别和解决方案相关推荐

  1. redis缓存雪崩、缓存击穿和缓存穿透还傻傻分不清?看这篇就够了

    前言 关于Redis的高频问题,缓存雪崩.缓存击穿和缓存穿透一定少不了,相信大家在面试中都被问到过类似的问题.为什么这些问题一直热门呢?因为我们在使用Redis缓存时,这些问题都是很容易遇到的.接下来 ...

  2. Redis 的缓存异常处理 —— 缓存雪崩、缓存击穿、缓存穿透

    Redis 的缓存异常处理 -- 缓存雪崩.缓存击穿.缓存穿透 在实际应用 Redis 过程中,如果将 Redis 作为数据库的缓存,经常会遇到这几个问题:缓存雪崩.缓存击穿.缓存穿透等. 缓存雪崩 ...

  3. redis面试:缓存雪崩、缓存击穿、缓存穿透

    缓存系统的三大问题 缓存雪崩 问题 所谓雪崩就是原来有所支撑的冰雪,某一瞬间失去依托,瞬间涌下来. 对比高并发系统,如果缓存系统故障,大量的请求无法从缓存完成数据请求,就全量冲向磁盘数据库系统,导致数 ...

  4. Redis-什么是缓存雪崩、缓存击穿、缓存穿透

    用户的数据一般都是存储于数据库,数据库的数据是落在磁盘上的,磁盘的读写速度可以说是计算机里最慢的硬件了. 当用户的请求,都访问数据库的话,请求数量一上来,数据库很容易就奔溃的了,所以为了避免用户直接访 ...

  5. Redis缓存击穿,缓存穿透,缓存雪崩,附解决方案

    前言 在日常的项目中,缓存的使用场景是比较多的.缓存是分布式系统中的重要组件,主要解决在高并发.大数据场景下,热点数据访问的性能问题,提高性能的数据快速访问.本文以Redis作为缓存时,针对常见的缓存 ...

  6. 缓存雪崩、缓存击穿、缓存穿透

    这里写目录标题 0. 前言 1. 缓存雪崩 (1). 什么是缓存雪崩? (2). 分析: (3). 解决方案: 2. 缓存击穿 (1). 什么是缓存击穿? (2). 分析: (3). 解决方案: 3. ...

  7. 再也不怕,缓存雪崩、缓存击穿、缓存穿透

    用户的数据一般都是存储于数据库,数据库的数据是落在磁盘上的,磁盘的读写速度可以说是计算机里最慢的硬件了. 当用户的请求,都访问数据库的话,请求数量一上来,数据库很容易就奔溃的了,所以为了避免用户直接访 ...

  8. Redis支持的数据类型以及使用场景,持久化,哨兵机制,缓存击穿,缓存穿透

    Redis支持的数据类型以及使用场景,持久化,哨兵机制,缓存击穿,缓存穿透 简单介绍一个redis? redis是内存中的数据结构存储系统,一个key-value类型的非关系型数据库,可持久化的数据库 ...

  9. Redis 缓存穿透、雪崩、缓存数据库不一致、持久化方式、分布式锁、过期策略

    1. Redis 缓存穿透 1.1 Redis 缓存穿透概念 访问了不存在的 key,缓存未命中,请求会穿透到 DB,量大时可能会对 DB 造成压力导致服务异常. 由于不恰当的业务功能实现,或者外部恶 ...

最新文章

  1. java 字符串用法_java中字符串的用法
  2. Ubuntu18.04 CUDA与cudnn安装
  3. uva 129 回溯法入门
  4. 粉色温馨——HTML框架示例
  5. linux安装mq报5724,linux下MQ简单配置手册.doc
  6. 面向对象中的修饰关键词
  7. php null截断 漏洞,CVE-2015-3412,CNNVD-201507-164|PHP NULL Character 安全漏洞 - 信息安全漏洞门户 VULHUB...
  8. Django实现省市县级联菜单
  9. html5 canvas 画直线
  10. JAVA 内部类 泛型 实现堆栈
  11. MySQL(19)-----日期和时间函数
  12. 关于新版本Firefox浏览器无法使用firebug与firepath问题的解决方案
  13. 第四届CSTQB®国际软件测试高峰论坛
  14. origin图上显示数据标签_Origin中如何将曲线上的数据显示出来?
  15. linux环境sphinx搭建,Sphinx安装配置应用
  16. unity如果编辑器意外崩溃了,但场景未保存,怎么办
  17. element-ui vue-quill-editor 富文本编辑器 解决插入图片不采用base64 从服务器传图片在显示返回url
  18. 仿微信朋友圈动态列表
  19. 什么是第一,第二,第三范式
  20. 技术状态管理(五)-技术状态记实

热门文章

  1. python脚本迁移数据库_Django 数据库迁移脚本
  2. 干货来袭!腾讯T4大佬,十分钟教你用svg做出精美的动画
  3. c语言用十年算入门,初识C语言_十年饮冰 难凉热血的技术博客_51CTO博客
  4. Drawboard PDF常见问题以及使用技巧(持续更新)
  5. 数字信号处理——DDS模块设计(3)
  6. html用div排版类型table,DIV排版和Table排版的区别
  7. SpringBoot中关于RunWith以及SpringBootTest
  8. 从numpy掩码到pytorch掩码
  9. 前后端分离项目部署到服务器(超详细)
  10. 照片文件与计算机系统,如何备份电脑中的照片等重要文件