mysql 缓存策略和解决方案

mysql的主从复制

mysql 缓存策略和解决方案_第1张图片

1、主库Master节点,接受来自客户端的增、删、改请求,通过IO-thread写入到binlog

2、从库slave节点,请求读取主库的binlog,通过IO-thread写入本地的relay log(中继日志)

3、从库通过sql-thread读取relay-log,并把其中的增删改执行一遍。

mysql的读写分离

mysql 缓存策略和解决方案_第2张图片

其中,读通过从节点读,写通过主节点写并同步到从节点,实现了读写分离

为什么需要mysql的缓存方案?

1、读多写少,内存的访问速度是磁盘访问速度的10万倍(数量级倍率),内存的访问速度⼤约是100ns,⽽⼀次磁盘访问⼤约是10ms;访问mysql时访问磁盘的次数跟b+树的⾼度相关;
2. ⼀般⼤部分项⽬中,数据库读操作是写操作的10倍左右;
缓冲层起到很好的提高读性能的作用

缓存层方案

将热点数据用redis缓存并数据库备份,将热点读操作转移到缓存数据库

可以很好的解决读性能。

引入了缓存层,如何解决一致性问题?

由以下几种情况:

1、mysql没有,缓存有

2、mysql有,缓存有,但不一致

3、mysql有,缓存没有

根据业务场景,看我们对一致性的要求:

最终一致性解决方案

如果项目想要做到最终一致性,我们的解决方案:

读:先读缓存,缓存有返回,没有则读mysql,再写redis

写:1、直接写mysql,等待mysql同步到redis

       2、先写缓存redis,设置超时时间,再写mysql,最终mysql同步到redis。

强一致性解决方案

读:先读缓存,缓存存在直接返回,缓存不存在,访问mysql获取,再写redis

写:先删除缓存,再写mysql,等待mysql同步到缓存。

上面的方案,假定:mysql时最终的数据源。

同步方案

mysql 缓存策略和解决方案_第3张图片

 

git clone https://gitee.com/mirrors/go-mysql-transfer.git

go-mysql-transfer 实现对mysql数据同步到redis


 

你可能感兴趣的:(数据库,mysql,缓存,数据库)