Mysql读写分离,怎么保证从数据库读到最新的数据?

Mysql读写分离,怎么保证从数据库读到最新的数据?

一、概述

数据库读写分离,主要解决高并发时,提高系统的吞吐量。读写分离数据库模型如下
Mysql读写分离,怎么保证从数据库读到最新的数据?_第1张图片

  • 写请求是直接写主库,然后同步数据到从库
  • 读请求一般直接读从库,除非强制读主库

二、怎么保证从数据库读到最新的数据

在高并发场景或者网络不佳的场景,如果存在较大的主从同步数据延迟,这时候读请求去读从库,就会读到旧数据。这时候最简单暴力的方法,就是强制读主库。但是这样就违背了读写分离的初衷。

优化方案就是使用缓存标记法

  1. A发起写请求,更新主库数据,并在缓存中设置一个标记,表示数据已更新,设置一个唯一标记ID比如:userId+buziId。
  2. 设置此标记,设置过期时间(主库和从库同步延迟的时间,这是个预估的时间值)
  3. B发起读请求,先判断此请求,在缓存中有没有更新标记。
  4. 如果存在标记,走主库;如果没有,请求走从库。

这个方案解决了数据不一致问题,但是每次请求都要先跟缓存打交道,但是正常的架构中都是加一层比如redis缓存保护,防止大流量请求把数据库击垮,这也是符合架构设计思想。

你可能感兴趣的:(数据库,mysql,redis,读写分离,数据同步)