Redis, MySQL, SSM

视频地址 https://www.bilibili.com/video/BV1dq4y1X7U3

缓存回收,淘汰

在这里插入图片描述

双写不一致,canal binlog订阅

在这里插入图片描述
先写内核,断电,仍然丢数据,除非触发硬件驱动。

1、先写Redis,再写MySQL,会有数据不一致情况。会丢数据。
在这里插入图片描述

2、先写MySQL,再写Redis,会有时差(写完MySQL到准备写Redis这段时差) => Cacal 主从同步 binlog订阅

超详细的Canal入门,看这篇就够了!
https://blog.csdn.net/yehongzhi1994/article/details/107880162

阿里开源Canal–①简介
https://www.jianshu.com/p/87944efe1005

在这里插入图片描述

3、MQ:更新放入MQ,消费的时候,进行更新MySQL,Redis。
在这里插入图片描述

Redis主从不一致

在这里插入图片描述
关于2:可以配置副本数量,可以设置超时时间,所有副本同步完成才可以返回ok。
关于4:wait 是客户端指令,等待2个redis节点处理成功,超时 0。

主从同步验证 SYNC,PSYNC

1、服务器
在这里插入图片描述
在这里插入图片描述
2、客户端
在这里插入图片描述
在这里插入图片描述

3、发送 SYNC 同步数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、发送 PSYNC 同步数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Redis 持久化方式

在这里插入图片描述

参考:Redis Bgrewriteaof 命令 https://www.cnblogs.com/xzlive/p/9851602.html
BGREWRITEAOF 手动触发。
在这里插入图片描述

MySQL主从复制过程

在这里插入图片描述

MySQL索引

聚簇索引:索引文件和数据文件是同一个文件
非聚簇索引:单独的一个索引文件

MySQL索引是存在内存,还是磁盘?
=> 磁盘

为什么有索引?
方便查询数据

什么是索引?
是一种数据结构

索引的原理?
像是字典查找字一样

MySQL为什么要主从同步

在这里插入图片描述

MySQL执行计划

在这里插入图片描述
1、id:执行顺序:表连接,,,谁先执行,谁后执行
在这里插入图片描述
2、table:是查询哪个表

3、type:执行情况。避免 ALL 的出现
在这里插入图片描述

4、key:使用到哪个索引。
MySQL优化器,会根据执行的情况选择使用具体哪个索引。

5、rows:读取数据点预估值。有时候并不是真正的查询数据量。

6、extra:有没有索引下推,索引覆盖,,,

MySQL慢查询

开启慢查询日志(设置超过1s就是慢查询),定位SQL,分析SQL,考虑优化,
在这里插入图片描述

索引设计原则

在这里插入图片描述

Spring单例Bean线程安全吗

在这里插入图片描述

Spring设计模式

在这里插入图片描述

Spring事务失效场景

在这里插入图片描述

分布式AKF方法论

分布式方法论:分 X、Y、Z 三个维度进行拆分
在这里插入图片描述

缓存主从问题

1、主挂了,从来顶替,获取到了数据,可能产生与数据库不一致的情况(这里我没悟到为什么是这样)
在这里插入图片描述
2、Redis分布式锁,不要用主从,最好也不要用集群,最好就是单机即可,像是分片。
在这里插入图片描述

3、主从最好不要开启持久化。因为开启会消耗性能。而且,开启之后,也不会使用持久化数据,而是清空自己的数据,来重新全量同步主的数据,全量同步完成之后,后面再进行增量同步。

但是有一件事:就是不开启持久化的时候。(我不清楚为什么会这样,因为哨兵是有谋朝篡位机制的,主即使回来了,也应该变为从的呀)
主从模式+哨兵情况下,主挂了,然后运维人员部署的有嗅探工具,发现Redis挂了,进行了自动重启。而此时哨兵也检测到了主机挂了,此时准备选举从变为主,此时,还没选举成功的时候,主又回来了,此时,从会同步主的数据。而主没有持久化,所以主是空的,从进行全量同步,从也变为了空。导致,数据全丢了。
在这里插入图片描述