一:序

  - 最近在对数据做缓存时候,会涉及到如何保证 数据库/Redis 一致性问题。

  - 刚好今天来总结下 一致性问题 产生的问题,和可能存在的解决方案。

二:(更新策略)-  先更新数据库,后更新缓存

  - 产生的问题

    - 

    - 由上面流程图可知道,请求A更新缓存应该比请求B更新缓存早才对,但是因为网络等原因,B却比A更早更新了缓存。

    - 这就导致了脏数据,因此不考虑 先更新数据库,后更新缓存 这个更新策略。

三:(更新策略)-  先删除缓存,在更新数据库

  - 产生的问题

    - 

    - 如果同时有一个请求A进行更新操作,另一个请求B进行查询操作。

    - 就会导致不一致的情形出现。而且,如果不采用给缓存设置过期时间策略,该数据永远都是脏数据。

四:(更新策略)-  先更新数据库,在删除缓存

  - FaceBook 也是采用这种方式。

  - 当然,这种方式也会产生数据不一致问题。

    - (1)缓存刚好失效

    -(2)请求A查询数据库,得一个旧值

    -(3)请求B将新值写入数据库

    -(4)请求B删除缓存

    -(5)请求A将查到的旧值写入缓存

  - 前提是 写操作耗时一定是低于 读操作的,在一般的条件下,这时不可能得。

五:小结

  - 这里只分析了平常可能想到的更新策略的分析。

  - 其实,要解决数据一致性的问题,还是要根据具体业务来具体判断。

  - 强一致性的,那么就需要悲观锁,使得一致。

  - 同时还有 延时双写/延时双删 等策略。其实都是为了根据自身业务来进行的操作。

  - 知道了这些策略可能带来的问题,也就可以在合适的业务下选择合适的策略来满足我们的需求。

Redis Mysql 双写一致性问题的更多相关文章

  1. 《Redis Mysql 双写一致性问题》

    一:序 - 最近在对数据做缓存时候,会涉及到如何保证 数据库/Redis 一致性问题. - 刚好今天来总结下 一致性问题 产生的问题,和可能存在的解决方案. 二:(更新策略)-  先更新数据库,后更新 ...

  2. Redis与Mysql双写一致性方案解析

    一 前言 首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用.在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作 但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存 ...

  3. 【Redis】- 双写一致性

    首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用.在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作. 但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存.又或者 ...

  4. Redis双写一致性与缓存更新策略

    一.双写一致性 双写一致性,也就是说 Redis 和 mysql 数据同步 双写一致性数据同步的方案有: 1.先更新数据库,再更新缓存 这个方案一般不用: 因为当有两个请求AB先后更新数据库后,A应该 ...

  5. 第三节:Redis缓存雪崩、击穿、穿透、双写一致性、并发竞争、热点key重建优化、BigKey的优化 等解决方案

    一. 缓存雪崩 1. 含义 同一时刻,大量的缓存同时过期失效. 2. 产生原因和后果 (1). 原因:由于开发人员经验不足或失误,大量热点缓存设置了统一的过期时间. (2). 产生后果:恰逢秒杀高峰, ...

  6. 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制

    [原创]分布式之数据库和缓存双写一致性方案解析(三)   正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...

  7. MySQL双主一致性架构优化

    一.双主保证高可用 MySQL数据库集群常使用一主多从,主从同步,读写分离的方式来扩充数据库的读性能,保证读库的高可用,但此时写库仍然是单点. 在一个MySQL数据库集群中可以设置两个主库,并设置双向 ...

  8. 【转】MySQL双主一致性架构优化

    [原文]https://www.toutiao.com/i6594414914838725133/ 一.双主保证高可用 MySQL数据库集群常使用一主多从,主从同步,读写分离的方式来扩充数据库的读性能 ...

  9. 并发中如何保证缓存DB双写一致性(JAVA栗子)

    并发场景中大部分处理的是先更新DB,再(删缓.更新)缓存的处理方式,但是在实际场景中有可能DB更新成功了,但是缓存设置失败了,就造成了缓存与DB数据不一致的问题,下面就以实际情况说下怎么解决此类问题. ...

随机推荐

  1. 原生 js 录屏功能

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  2. PHP Math常量

    常量名 常量名 常量值 PHP M_E e 2.7182818284590452354 4 M_EULER Euler 常量 0.57721566490153286061 5.2.0 M_LNPI l ...

  3. 【SoloPi】SoloPi使用3-性能测试-启动时间测试

    响应耗时计算工具Soloπ响应耗时计算工具,通过录屏分帧的方式自动识别起始点和结束点,精确计算耗时. 特性模拟用户视觉,计算结果更贴近用户体验自动记录点击起始点,自动识别屏幕变化结束点通过OpenCV ...

  4. javascript 之 命名空间

    注意点: 1/IIFE是现代js框架最主要的基础设施,保证变量不被污染. 2/基本上我们把命名空间等同于框架的名字. 内容 一.简单的命名空间 <input type="button& ...

  5. 为Visual Studio安装其他控件(cognex 康耐视)时报错:未能加载文件或程序集 EnvDTE, Version=8.0.0.0

    解决办法: 在VS的路径下(一般为:C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Private ...

  6. JS如何做爬虫

    JS如何做爬虫,JS做爬虫要靠node节点环境,cheerio(主要是解析下载的网页可以像jquery一样,这是必要的,使用它在npm上查看文档也很简单). Iconv-lite(主要解决下载资源的乱 ...

  7. 七年开发小结MyBatis 在 Spring 环境下的事务管理

    MyBatis的设计思想很简单,可以看做是对JDBC的一次封装,并提供强大的动态SQL映射功能.但是由于它本身也有一些缓存.事务管理等功能,所以实际使用中还是会碰到一些问题——另外,最近接触了JFin ...

  8. git相关的一篇不错的文章

    原文地址:http://josh-persistence.iteye.com/blog/2215214 点击进入

  9. Date与String的相互转换

    构造函数 日期:new Date();//获取当前日期,精确到毫秒. 日期:new Date(long date);//即1970 年 1 月 1 日 00:00:00 GMT(Greenwich M ...

  10. Linux 磁盘、分区、文件系统、挂载

    磁盘 Linux所有设备都被抽象成为一个文件,保存在/dev目录下. 设备名称一般为hd[a-z]或sd[a-z].如果电脑中有多硬盘,则设备名依次为sda.adb.sdc...以此类推 IDE设备的 ...