MySQL与Redis缓存一致性问题

Redis就是一个使用C语言开发的数据库,为了避免使用MySQL请求过多影响性能,就会采用它。高并发场景下保持mysql与redis数据的一致性问题不容忽视。

场景:线程A,修改数据,线程B使用数据。

1、双删策略:线程A写数据时,先删除redis的数据,然后修改mysql,之后再删除redis的数据。

问题:线程A在修改mysql的时候,线程B先读取了数据,接着线程A执行完毕,此时redis中没有数据了,接着线程B处理业务然后设置redis缓存,此时redis中的数据还是线程A修改前的数据。

2、延迟双删策略:线程A写数据时,先删除redis的数据,然后修改mysql,之后再延迟一个业务时间后删除redis的数据。

问题:该策略无法包括这个延迟时间;并且会影响系统的处理能力。

3、读写串行化:只要读和写是并发产生的就必然会存在,数据一致性问题。如果要彻底解决该问题,就要串行。该中方式会影响效率,如果采用可以做好压力测试。

使用分布式锁:影响效率

使用队列:将操作同一资源的请求,打到同一个队列中。

4、cancel:同步mysql的bin_log,更新redis。该方式也会存在延迟。

5、redis设置失效时间

(0)

相关推荐

  • 亿级流量网站架构核心技术【笔记】(二)

    九.应用级缓存 A.缓存简介1.先从缓存中读取数据,如果没有,再从慢速设备上读取实际数据并同步到缓存 2.经常读取的数据.频繁访问的数据.热点数据.I/O瓶颈数据.计算昂贵的数据.符合5分钟法则和局部 ...

  • 【面试热点】如何解决缓存系统的数据不一致问题

    设为"星标",重磅干货,第一时间送达 1缓存系统交互 缓存系统设计是后端开发人员的必备技能,也是实现高并发的重要武器. 对于读多写少的场景,我们通常使用内存型数据库作为缓存,关系型 ...

  • 高并发存储优化篇:诸多策略,缓存为王

    本文内容概述 缓存是什么 1.1. 存储宕机的致命代价 1.2. 数据库性能为什么会下降 1.3. 缓存的类型 一线研发最头疼的缓存问题 2.1. 缓存穿透 2.2. 缓存击穿 2.3. 缓存雪崩 2 ...

  • MySQL与Redis缓存的同步方案

    来源:dongshao.blog.csdn.net/article/details/107190925 本文介绍MySQL与Redis缓存的同步的两种方案 通过MySQL自动同步刷新Redis,MyS ...

  • MySQL 与 Redis 缓存的同步方案

    来源:dongshao.blog.csdn.net/article/details/107190925 本文介绍MySQL与Redis缓存的同步的两种方案 方案1:通过MySQL自动同步刷新Redis ...

  • 如何保证 Redis 缓存与数据库双写一致性?

    作者:不学无数的程序员 在做系统优化时,想到了将数据进行分级存储的思路.因为在系统中会存在一些数据,有些数据的实时性要求不高,比如一些配置信息. 基本上配置了很久才会变一次.而有一些数据实时性要求非常 ...

  • 小议CPU缓存一致性协议MESI

    你有没有听过缓存一致性协议?你是否了解CPU中的高速缓存?本文带你揭秘,从CPU的视角来看待并发编程. CPU架构 缓存与主存 解读缓存一致性(Cache Coherency),先看一下CPU的架构 ...

  • Linux值Redis缓存的编译安装

    通过wget方式直接在linux上下载Redis [root@livecd root]#wget http://download.redis.io/releases/redis-3.2.3.tar.g ...

  • 从零搭建java后台管理系统(二)mysql和redis安装

    接上篇开始安装mysql和redis 注意了,如果用阿里云服务器,外网访问的端口必须在安全组开启,否则外网访问不通 三.服务器安装redis和mysql 本次环境搭建将所有第三方服务会安装在阿里云服务 ...

  • 缓存一致性协议(MESI协议)

    大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入.由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执 ...

  • 面试官:缓存一致性问题怎么解决?

    关于Redis的其他的一些面试问题已经写过了,比如常见的缓存穿透.雪崩.击穿.热点的问题,但是还有一个比较麻烦的问题就是如何保证缓存一致性. 对于缓存和数据库的操作,主要有以下两种方式. 先删缓存,再 ...

  • redis缓存

    分布式项目的常见问题:对于首页每天有大量的人访问,对数据库造成很大的访问压力,甚至是瘫痪.那如何解决呢?我们通常的做法有两种:一种是数据缓存.一种是网页静态化. redis是一款开源的Key-Valu ...