若有收获,请记得分享和转发哦

Redis 拥有高性能的数据读写功能,被我们广泛用在缓存场景,一是能提高业务系统的性能,二是为数据库抵挡了高并发的流量请求,

把 Redis 作为缓存组件,需要防止出现以下的一些问题,否则可能会造成生产事故。

  • Redis 缓存满了怎么办?

  • 缓存穿透、缓存击穿、缓存雪崩如何解决?

  • Redis 数据过期了会被立马删除么?

  • Redis 突然变慢了如何做性能排查并解决?

  • Redis 与 MySQL 数据一致性问题怎么应对?

今天跟大家一起深入探索缓存的工作机制和缓存一致性应对方案

在本文正式开始之前,我觉得我们需要先取得以下两点的共识:

  1. 缓存必须要有过期时间;

  2. 保证数据库跟缓存的最终一致性即可,不必追求强一致性。

目录如下:

  • 1. 什么是数据库与缓存一致性

  • 2. 缓存的使用策略

    • 2.1 Cache-Aside (旁路缓存)

    • 2.2 Read-Through(直读)

    • 2.3 Write-Through 同步直写

    • 2.4 Write-Behind

  • 3. 旁路缓存下的一致性问题分析

    • 3.1 先更新缓存,再更新数据库

    • 3.2 先更新数据库,再更新缓存

    • 3.3 先删缓存,再更新数据库

    • 3.4 先更新数据库,再删缓存

  • 4. 一致性解决方案有哪些?

    • 4.1 缓存延时双删

    • 4.2 删除缓存重试机制

    • 4.3 读取 binlog 异步删除

  • 总结

按照前面说的套路,假设第一个操作成功,第二个操作失败推断下会发生什么?高并发场景下又会发生什么?

第二步写数据库失败

假设现在有两个请求:写请求 A,读请求 B。

写请求 A 第一步先删除缓存成功,写数据到数据库失败,就会导致该次写数据丢失,数据库保存的是旧值

接着另一个读请 B 求进来,发现缓存不存在,从数据库读取旧数据并写到缓存中。

高并发下的问题

先删缓存,再写数据库

掘地三尺搞定 Redis 与 MySQL 数据一致性问题相关推荐

  1. 搞机:使用docker-compose10分钟搞定redis,mongodb,mysql三大数据库

    redis,mongodb,mysql三大数据库应该算是后端最为常用的三种数据库了,部署后端服务的时候一个一个的安装过于麻烦,这里我们结合docker的使用实现快速安装,并使用docker-compo ...

  2. 搞定 Redis 数据存储原理,别只会 set、get 了

    在上一篇通过源码编译构建出可调式环境之后,想必你想更深入了解我的整体架构.当你熟悉我的整体架构和每个模块,遇到问题才能直击本源,直捣黄龙,一笑破苍穹. 我的核心模块如图 1-10. 图1-10 图 1 ...

  3. 一文搞定Redis五大数据类型及使用场景

    作者 | 周明尧 来源 | Java旅途(ID:Javatrip) 头图 |  CSDN 下载自东方IC Redis 是一种基于键值对的NoSQL数据库,它的值主要由string(字符串),hash( ...

  4. liunx上mysql源码安装mysql,搞定linux上MySQL编程(一):linux上源码安装MySQL

    [版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] 1. 首先下载源码包: ftp://ftp.jaist.ac.jp/pub/m ...

  5. redis中有key但是删不掉_一篇图文,搞定Redis事务

    在面试的时候,通常会被问到redis是如何实现分布式锁的.如果我们只知道是借助于setnx/setex ,而不了解setnx/setex底层如何实现,那基本上是无法过关的,尤其是大厂.那究竟redis ...

  6. mysql 存储引擎 面试_搞定PHP面试 - MySQL基础知识点整理 - 存储引擎

    MySQL基础知识点整理 - 存储引擎 0. 查看 MySQL 支持的存储引擎 可以在 mysql 客户端中,使用 show engines; 命令可以查看MySQL支持的引擎: mysql> ...

  7. Python入门系列(十一)一篇搞定python操作MySQL数据库

    开始 安装MySQL驱动 $ python -m pip install mysql-connector-python 测试MySQL连接器 import mysql.connector 测试MySQ ...

  8. 搞定Redis高级特性与性能调优

    阅读文本大概需要15分钟. 本文适合使用 Redis 的普通开发人员,以及对 Redis 进行选型.架构设计和性能调优的架构设计人员: Redis 的数据结构和相关常用命令 数据持久化 内存管理与数据 ...

  9. redis mysql原理_Canal(redis与mysql数据一致性)

    canal实现原理 1.canal server端会伪装成mysql从节点,去读取mysql主节点binlog文件,实现增量同步 2.canal server端将数据以json格式同步到客户端,MQ消 ...

最新文章

  1. php使用workerman实战,使用workerman实现在线聊天的方法
  2. 张宏江:人工智能的长远发展需要有人坐冷板凳
  3. 服务器比普通电脑响应速度快吗,云服务器比普通的快吗
  4. 从原型链看DOM--Node类型
  5. 【Tiny4412】Tiny4412烧写uboot脚本分析
  6. 学习随笔:Django 补充及常见Web攻击 和 ueditor
  7. mysql 自动化部署,MySQL标准化、自动化部署
  8. 前端为什么要工程化?
  9. nowcoderG 小国的复仇
  10. MySQL配置优化选项
  11. 董耀祖:云原生是趋势,多云、边缘云也变得很热
  12. 微信淘宝客小程序开发多多客京东客六合一系统外卖cps返利源码
  13. 云服务器保存文件,云服务器保存文件命令
  14. Android基于opencv4.6.0实现人脸识别功能
  15. 11.计算机基础之计算机网络基础
  16. throw java_THROW,JAVA的throw和throws怎么用!
  17. 【优秀毕设V2.0】基于树莓派的OpenCV-Python摄像头人脸追踪及手势识别、网络地址推流及远程控制系统(多功能系统、含演示视频)
  18. 心动C++情牵汉洛塔
  19. Auto.js学习笔记2:真机连接vscode开发工具进行调试,自动开启微信app,自动切换通讯录和微信界面
  20. JavaScript mongodb(数据库)简单值

热门文章

  1. Echarts的配置与使用
  2. Go 青年团聚召集令,2050,我们来了
  3. 英语不好,能不能学软件编程?不懂英文能学编程吗
  4. 0 1背包 填表实现
  5. 推荐系统实践读书笔记-01好的推荐系统
  6. SQL必知必会读书笔记
  7. 纽约州立大学水牛城分校计算机科学专业,纽约州立大学水牛城分校
  8. 今日闲谈:为何国产动画能在抖音异军突起?
  9. Vulnhub靶场题解
  10. 新月剑痕十项属性内存修改器