史上超级详细:缓存与数据库一致性如何解决
2021/7/1 19:27:37
本文主要是介绍史上超级详细:缓存与数据库一致性如何解决,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
# 01\. 基础架构:一条SQL查询语句是如何执行的? ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107547236929.jpg) MySQL 的逻辑架构图 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107547538197.jpg) # 02\. 日志系统:一条SQL更新语句是如何执行的? 之前你可能经常听DBA同事说,MySQL可以恢复到半个月内任意一秒的状态,惊叹的同时,你是不是心中也会不免会好奇,这是怎样做到的呢? ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107548717954.jpg) # 03\. 事务隔离:为什么你改了我还看不见? 提到事务,你肯定不陌生,和数据库打交道的时候,我们总是会用到事务。最经典的例子就是转账,你要给朋友小王转100块钱,而此时你的银行卡只有100块钱。 转账过程具体到程序里会有一系列的操作,比如查询余额、做加减法、更新余额等,这些操作必须保证是一体的,不然等程序查完之后,还没做减法之前,你这100块钱,完全可以借着这个时间差再查一次,然后再给另外一个朋友转账,如果银行这么整,不就乱了么?这时就要用到“事务”这个概念了。 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107548312935.jpg) # 说说索引(上) 提到数据库索引,我想你并不陌生,在日常工作中会经常接触到。比如某一个 SQL 查询比较慢,分析完原因之后,你可能就会说“给某个字段加个索引吧”之类的解决方案。但到底什么是索引,索引又是如何工作的呢? ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107548841479.jpg) # 说说索引(下) ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107548871369.jpg) # 06\. 全局锁和表锁 :给表加个字段怎么有这么多阻碍? 数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107549943002.jpg) # 07\. 行锁功过:怎么减少行锁对性能的影响? MySQL 的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,比如MyISAM引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上任何时刻只能有一个更新在执行,这就会影响到业务并发度。InnoDB是支持行锁的,这也是 MyISAM 被 InnoDB 替代的重要原因之一。 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107549222326.jpg) # 08\. 事务到底是隔离的还是不隔离的? ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107549610764.jpg) # 09\. 普通索引和唯一索引,应该怎么选择? ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107549986306.jpg) # 10\. MySQL为什么有时候会选错索引? 不知道你有没有碰到过这种情况,一条本来可以执行得很快的语句,却由于MySQL选错了索引,而导致执行速度变得很慢? ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107549350852.jpg) # 11\. 怎么给字符串字段加索引? 现在,几乎所有的系统都支持邮箱登录,如何在邮箱这样的字段上建立合理的索引,是要讨论的问题。 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107550748394.jpg) # 12\. 为什么你的MySQL会“抖”一下? 平时的工作中,不知道你有没有遇到过这样的场景,一条 SQL 语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。看上去,这就像是数据库“抖”了一下。今天,我们就一起来看一看这是什么原因。 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107550826699.jpg) # 13\. 为什么表数据删掉一半,表文件大小不变? 我的数据库占用空间太大,我把一个最大的表删掉了一半的数据,怎么表文件的大小还是没变? ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107550471558.jpg) # 14\. count(*)这么慢,你该怎么办? 在开发系统的时候,你可能经常需要计算一个表的行数,比如一个交易系统的所有变更记录总数。这时候你可能会想,一条select count(*) from t 语句不就解决了吗? 但是,你会发现随着系统中记录数越来越多,这条语句执行得也会越来越慢。然后你可能就想了,MySQL 怎么这么笨啊,记个总数,每次要查的时候直接读出来,不就好了吗。 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107550889443.jpg) # 15\. 日志和索引相关问题 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107550109666.jpg) 两阶段提交示意图 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107551804270.jpg) # 16\. “order by”是怎么工作的? ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107551722776.jpg) # 17\. 如何正确地显示随机消息? ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107551512038.jpg) # 18\. 为什么这些SQL语句逻辑相同,性能却差异巨大? 在 MySQL 中,有很多看上去逻辑相同,但性能却差异巨大的 SQL 语句。对这些语句使用不当的话,就会不经意间导致整个数据库的压力变大。 我今天挑选了三个这样的案例和你分享。希望再遇到相似的问题时,你可以做到举一反三、快速解决问题。 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107551846737.jpg) # 19\. 为什么我只查一行的语句,也执行这么慢? ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107551739320.jpg) # 20\. 幻读是什么,幻读有什么问题? ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107551115366.jpg) # 21\. 为什么只改一行的语句,锁这么多? ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107552837840.jpg) # 22\. MySQL有哪些“饮鸩止渴”提高性能的方法? 不知道你在实际运维过程中有没有碰到这样的情景:业务高峰期,生产环境的 MySQL 压力太大,没法正常响应,需要短期内、临时性地提升一些性能。 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107552166434.jpg) # 23\. MySQL是怎么保证数据不丢的? ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107552429651.jpg) # 24\. MySQL是怎么保证主备一致的? 大家知道 binlog 可以用来归档,也可以用来做主备同步,但它的内容是什么样的呢?为什么备库执行了 binlog 就可以跟主库保持一致了呢?咱们就好好唠唠这个问题。 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107552521539.jpg) # 25\. MySQL是怎么保证高可用的? ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107552406560.jpg) # ### 最后 在面试前我整理归纳了一些面试学习资料,文中结合我的朋友同学面试美团滴滴这类大厂的资料及案例 **感兴趣的朋友可以[点击Java学习](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)免费获取。** ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107553144664.jpg) ![MyBatis答案解析](http://www.www.zyiz.net/i/li/?n=2&i=images/20210701/1625107553932461.jpg) **由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!** 大家看完有什么不懂的可以在下方留言讨论也可以关注。 觉得文章对你有帮助的话记得关注我点个赞支持一下!这篇关于史上超级详细:缓存与数据库一致性如何解决的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程
- 2024-11-26Springboot单体架构搭建资料:新手入门教程
- 2024-11-26Springboot单体架构搭建资料详解与实战教程
- 2024-11-26Springboot框架资料:新手入门教程
- 2024-11-26Springboot企业级开发资料入门教程
- 2024-11-26SpringBoot企业级开发资料详解与实战教程
- 2024-11-26Springboot微服务资料:新手入门全攻略