学习笔记20230315
创始人
2025-05-30 08:32:31

目录

一、mysql聚簇和非聚簇索引的区别(非叶子节点页,一页16KB)

二、Mysql MyIsam和InnoDB的区别

三、mysql的隔离级别

四、什么是MVCC

五、事务的基本特性和隔离级别

六、redis分布锁实现

七、redis zset底层数据结构

八、缓存雪崩、缓存穿透、缓存击穿

九、redis 数据结构 及用途

十、缓存和mysql 一致性方案

十一、redis 备份

十二、redis 过期删除策略

十三、mysql 底层索引结构

十四、mysql 优化策略

十五、Autowrited和Resource 的区别

十六 、Sentinel用什么限流算法与ngix算法区别

总结


一、mysql聚簇和非聚簇索引的区别(非叶子节点页,一页16KB)

  • 聚簇索引:数据存储与索引放在一起,叶子节点的data域存放的是数据。
  • 非聚簇索引:数据存储与索引不一起放在叶子节点,包含MyIsam主键或辅助索引。

优势:

1、查询速度快(队覆盖索引之外);

2、范围查询效率高;

3、适合用于排序;

劣势:

1、维护索引成本高,特别是插入新行和更新主键要分页(page split)(低峰期精神生活mize table优化表、独立表空间);

2、数据存储稀疏,可能会比全表扫描更慢;

3、如果聚集索引比较大时,辅助索引也会变得更大;

InnoDB中聚簇索引(主键、非空唯一索引、6个字节长整形自增row_id)。

MyIsam只是非聚簇索引。

二、Mysql MyIsam和InnoDB的区别

1、Mylsam 是支持全文索引、储存行记录、数据与索引是分别储存的、只有表级锁;

2、InnoDB 支持事务、外键、表级锁、行级锁(默认);

三、mysql的隔离级别

1、序列化:解决幻读(两次查询条数不一致,读取第一次不存在的数据 ,插入时已经存在)。

2、可重复读(默认RR):解决不可重复读(select ... for update解决幻读)select ... for update学习_难顶货的博客-CSDN博客。

3、读已提交:解决脏读(读取到事务未提交的数据)。

4、读未提交:

mysql隔离级别_songtaiwu的博客-CSDN博客

四、什么是MVCC

多版本并发控制:通过快照读保存数据,解决读写锁冲突,每个事务session能看到自己特定的版本数据 ,版本链。

mvcc作用隔离级别:

两个隐藏列:

比对过程:

两个隔离级别的区别:

总结:

五、事务的基本特性和隔离级别

1、原子性:要么全部成功,要么全部失败。

2、一致性:总是一致性状态到另外一个一致性的状态。

3、隔离性: 一个事务不会影响到另外一个事务。

4、持久性: 事务提交完后,保存到数据库。

六、redis分布锁实现

问题:

1、原子性:锁不释放,setnx 解决;

2、过期时间超时:任务执行时超出,看门狗机制 ,锁过时间的三分之一时间的定时器(默认30秒)

3、可重入:递归查询、类似AQS机制,计数;

4、误删:uuid + lua 

5、异步复制实现高可用性:多个master集群,红锁、redLock,n/2+1 , 总体比对时间不能超过过期时间

七、redis zset底层数据结构

ziplist: 元素数量超过128个,所有元素大小超过64字节。

skiplist:

设计理念:链表的基础上建立多层索引(最高32层),空间换时间。

底层数据结构: zskiplist: tail,head,length,level ,  zskiplistnode: 节点

每个节点有1~32层的层数, 前进指针+跨度

八、缓存雪崩、缓存穿透、缓存击穿

1、缓存雪崩:大量数据过期,访问数据库

加随机时间,互斥锁,数据预热

2、缓存穿透:缓存和数据库都没有数据

应用层校验,设置短期的空数值,布隆过滤器

3、缓存击穿:缓存没有数据 ,高并发下访问数据库 

热点数据,排队

九、redis 数据结构 及用途

1、String :字符串

2、List : 

3、set: 粉丝

4、zset: 排序

5、hash : 字典

用途:session共享、坐标、大数据基数统计、计数器。

十、缓存和mysql 一致性方案

1、先修改数据再删除缓存,存在读取历史缓存问题。

2、先删除缓存再修改数据,存在未修改前缓存数据。

3、在第二个方案基础上,过段时间删除缓存。

十一、redis 备份

1、rdb: save、bgsave  (fork子进程)、多组 save  m n (基于bgsave,二进制  dump.rdb,全量同步)

2、aof: log文件,定期覆盖压缩 ,操作系统缓存,定时去查找数据,每次修改,由操作系统决定。

3、rdb+aof 默认启用aof

十二、redis 过期删除策略

1、定时删除:定时器 、节省内存、浪费cpu资源。

2、惰性删除:查询再判断,内存浪费

3、定期删除:设置执行时间和扫描耗时,平衡执行效率和限时

分桶,随机20key

十三、mysql 底层索引结构

1、二叉树、二叉查找树、平衡二叉树,红黑树、b树、b+树

优点:

非叶子节点只需要存放索引不储存数据 ,数据页固定,存放更多数据;

插入、删除 ,冗余节点不会导致树变形;

叶子节点是双向链表,按顺序存放,有利于范围查询。

十四、mysql 优化策略

1、选择适当储存引擎;

2、建立适当索引,分布值多做为索引 ;

3、不必要查询字段 ;

4、建立字段属性;

5、使用join代替子查询;

6、适用联合union来代替手动创建的临时表

7、执行计划:

 id:

select_type: simple、subquery、derived、union

table: 表名或别名

parttion: 

type: all、 index(按索引次序)、range(有限制索引范围)、ref (单个值的行)、eq_ref(主键或唯一索引)、const (常量)、NULL(不用返回表)

possiable_key: 可能用到的索引。

key: 优化查询后,实际用到的索引。

key_len: 索引长度

ref: 表示key列记录中查找值所用的列或常量。

rows: 读取的行数,不是很精准。

filtered(5.1): 针对表里符合条件的记录数的百分比。

Extra: Using index

十五、Autowrited和Resource 的区别

spring 支持依赖注入

autowrite  启动就加载到IOC 容器(require=false)、type方式 ;

存在问题及解决方案:

存在多个bean ,执行

@Primay : 优先加载这个 bean

@Quifilter:  过滤数据

resource   获取才加载,name方式 也可以指定type

如果指定情况下会优先使用name => type

十六 、Sentinel用什么限流算法与ngix算法区别


总结

相关内容

热门资讯

铁路“静音车厢”列车数量增加 ...   出门坐高铁,有人想安静地看看书、休息一会儿,也有人希望能专心处理工作。但车厢里的交谈声、电子设备...
贵州千年侗寨非遗织就乡村振兴锦...   新华社贵阳1月17日电(记者周宣妮)走进贵州省黎平县肇兴侗寨,流水蜿蜒、青山绿水环抱着千年鼓楼,...
斯帕莱蒂:卡利亚里10个人轮流... 在这个竞争激烈的意甲赛季,谁能想到尤文图斯竟然在客场以0-1不敌卡利亚里?这场比赛让不少球迷大跌眼镜...
商业秘密|宝可梦卡牌价格飙涨至... 热钱加速涌入的背景下,市场迎来“卡牌第一股”的路还有多长? 近日,有宝可梦集换式卡牌的买家向第一财经...
长源东谷:公司采用行业内普遍适... 证券日报网讯 1月16日,长源东谷在互动平台回答投资者提问时表示,公司采用行业内普遍适用的“订单式生...