| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Mysql的缓存方案 -> 正文阅读 |
|
[大数据]Mysql的缓存方案 |
mysql主从复制原理图
读写分离
最终?致性写主读从, ?为什么需要缓冲层?前提读多写少,单个主节点能?撑项?数据量;数据的主要依据是mysql; mysqlmysql有缓冲层,它的作?也是?来缓存热点数据,这些数据包括数据?件、索引?件等;mysql 缓冲层是从?身出发,跟具体的业务?关;这?的缓冲策略主要是lru,当然是经过优化的lru; mysql数据主要存储在磁盘当中,适合?量重要数据的存储;磁盘当中的数据?般是远?于内存当 中的数据;mysql是关系型数据库,?便 OLTP 进?统计分析;?般业务场景关系型数据库 (mysql)作为主要数据库; 缓冲层缓存数据库可以选?redis,memcached;它们所有数据都存储在内存当中,当然也可以将内存当 中的数据持久化到磁盘当中;内存的数据和磁盘的数据是???的; 存储?较?项重要的数据?1. 内存的访问速度是磁盘访问速度的10万倍(数量级倍率);内存的访问速度?约是100ns, ??次磁盘访问?约是10ms;访问mysql时访问磁盘的次数跟b+树的?度相关; 2. ?般?部分项?中,数据库读操作是写操作的10倍左右; 总结
原理图为什么有同步的问题??没有缓冲层之前,我们对数据的读写都是基于mysql;所以不存在同步问题;这句话也不是必然, ?如读写分离就存在同步问题(数据?致性问题); 引?缓冲层后,我们对数据的获取需要分别操作缓存数据库和mysql;那么这个时候数据可能存在 ?个状态?
4和5显然是没问题的,我们现在需要考虑1、2以及3; ?先明确?点:我们获取数据的主要依据是mysql,所以mysql数据正确就万事?吉,只需要将 mysql的数据正确同步到缓存数据库就可以了;同理,缓存有,mysql没有,这?较危险,此时我 们可以认为该数据为脏数据;所以我们需要在同步策略中避免该情况发?;同时可能存在mysql和 缓存都有数据,但是数据不?致,这种也需要在同步策略中避免; 缓存不可?的话,我们整个系统应该要保持正常?作; mysql不可?的话,应该停?对外提供服务; 另外可以将问题 3 转化为问题 1 尝试解决同步(?致性)写
读
总结1. 业务层引?了两个变化?向,尽量减少redis的流程; 2. 业务层控制热数据流程;回写流程控制热数据流程; 3. 热数据不是总是热数据;需要将热数据设置超时时间; 解决数据同步问题?致性问题强?致性
最终?致性?
数据同步?案1?原理图 数据同步?案2? ?代码1 git clone https://gitee.com/mirrors/go-mysql-transfer.git
代码2 git clone https://gitee.com/josinli/mysql_redis.git
问题是否解决?没有,我们刚刚思考的?向全是正常流程下的?式,我们来看异常情况; 缓存穿透假设某个数据redis不存在,mysql也不存在,?且?直尝试读怎么办?缓存穿透,数据最终压? 依然堆积在mysql,可能造成mysql不堪重负?崩溃 解决1. 发现mysql不存在,将redis设置为 设置过期时间 下次访问key的时候 不再访问 mysql 容易造成redis缓存很多?效数据; 2. 布隆过滤器,将mysql当中已经存在的key,写?布隆过滤器,不存在的直接pass掉; 缓存击穿缓存击穿 某些数据redis没有,但是mysql有;此时当?量这类数据的并发请求,同样造成mysql 过?; 原理图解决?1. 加锁 请求数据的时候获取锁,如果获取成功,则操作,获取失败,则休眠?段时间(200ms)再去获 取;获取成功,则释放锁 ?先读redis,不存在,读mysql,存在,写redis key的锁 整个流程?完,才让后?的服务器访问 2. 将很热的key,设置不过期 缓存雪崩表示?段时间内,缓存集中失效(redis? mysql 有),导致请求全部?mysql,有可能搞垮数据库, 使整个服务失效; 解决1. 如果因为缓存数据库宕机,造成所有数据涌向mysql; 采??可?的集群?案,如哨兵模式、cluster模式; 2. 如果因为设置了相同的过期时间,造成缓存集中失效; 设置随机过期值或者其他机制错开失效; 3. 如果因为系统重启的时候,造成缓存数据消失; 重启时间短,redis开启持久化(过期信息也会持久化)就?了; 重启时间?提前将热数据导 ?redis当中. ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 3:21:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |