mysql 硬盘缓存,90分钟搞懂 mysql 缓存问题的解决方案

1. 读写分离方案

2. 强一致性和最终一致性下的解决方案

3. 缓存出现的故障如何解决

这是最近帮朋友解决的一个架构问题

2a04dd7a4e6aa6cb01dae0d12ceff7ac.png

a742867b52eb2cca1fd641dd2e06f8ef.png

大家看先看一下这个需求,也就是看一下我们mysql的缓存问题,

他有那些应用场景,

首先需要一个网管服务器,网服务器是对应这接收客户端的链接,要求二

7863d93f7322354454d2756bb7cffdf9.png

登陆服是多个,玩家账号数据 玩家角色数据 这两个是共通的 需要同步 ,redis只存储热点数据,redis、mysql只需要一个

这里使用redi,是为了让我们玩家可以快速的登陆,那么大家可以思考一个问题,因为在游戏业务当中我们断线重链是很平凡的,所以我们在账号登陆的时候,会反复的请求数据库,如果我们这个数据库一直在mysql这个数据,mysql压力会很大,所以我们需要在mysql前面 放一个redis来缓冲玩家的数据,这就可以让我们快速的登陆,进入我们的游戏。

d14091fcc253d8729c6c42d016b960a7.png

解决方案

1.mysql项目中,读请求远大于写请求;经过测试读请求是写请求的大约10倍左右,有的项目可能会更多。

我们平时是怎么解决这个问题呢?

第一我们要有一个读写分离,就是利用mysql主从复制这样的原理。

31ccd939a28ae80548cda6ce24d1d562.png

670a226c7563be8e0d08def5a116ed01.png

这样就解决主从压力过大了,主从复制会带来什么问题?

数据不一致(所以我们必须知道主从复制的原理)

读写分离

98b814e52dc0f3b63b294e9bf817852a.png

几项重要的数据

1.内存的访问速度是碰盘访问速度的10万倍(数量级倍率);内存的访问速度大约是100ns,而一次碰盘访问大约是10ms;访问mysq时访问磁盘的次数跟b+树的高度相关;

2.一般大部分项目中,数据库读操作是写操作的10倍左右;

总结

1.由于mysqi的缩冲层不由用户来控制,也就是不能由用户来控制缓存具体数据

2.访问磁盘的速度比较假,尽量获取数据从内存中获取;

3.主要解决读的性能;因为写没必要优化,我们必须让我们的数据正确的落盘;

4.项目中需要存储的数据应该远大于内存的容量,所以我们数据获取的依据应该是mysql;

5.redis存储的只是用户目定义的热点数据;以下的讨论都是基于热点数据的同步问题;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值