mysql 缓存策略和解决方案

mysql的主从复制

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

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

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

mysql的读写分离

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

为什么需要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时最终的数据源。

同步方案

 

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

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


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值