一、mysql聚簇和非聚簇索引的区别(非叶子节点页,一页16KB)
二、Mysql MyIsam和InnoDB的区别
三、mysql的隔离级别
四、什么是MVCC
五、事务的基本特性和隔离级别
六、redis分布锁实现
七、redis zset底层数据结构
八、缓存雪崩、缓存穿透、缓存击穿
九、redis 数据结构 及用途
十、缓存和mysql 一致性方案
十一、redis 备份
十二、redis 过期删除策略
十三、mysql 底层索引结构
十四、mysql 优化策略
十五、Autowrited和Resource 的区别
十六 、Sentinel用什么限流算法与ngix算法区别
总结
优势:
1、查询速度快(队覆盖索引之外);
2、范围查询效率高;
3、适合用于排序;
劣势:
1、维护索引成本高,特别是插入新行和更新主键要分页(page split)(低峰期精神生活mize table优化表、独立表空间);
2、数据存储稀疏,可能会比全表扫描更慢;
3、如果聚集索引比较大时,辅助索引也会变得更大;
InnoDB中聚簇索引(主键、非空唯一索引、6个字节长整形自增row_id)。
MyIsam只是非聚簇索引。
1、Mylsam 是支持全文索引、储存行记录、数据与索引是分别储存的、只有表级锁;
2、InnoDB 支持事务、外键、表级锁、行级锁(默认);
1、序列化:解决幻读(两次查询条数不一致,读取第一次不存在的数据 ,插入时已经存在)。
2、可重复读(默认RR):解决不可重复读(select ... for update解决幻读)select ... for update学习_难顶货的博客-CSDN博客。
3、读已提交:解决脏读(读取到事务未提交的数据)。
4、读未提交:
mysql隔离级别_songtaiwu的博客-CSDN博客
多版本并发控制:通过快照读保存数据,解决读写锁冲突,每个事务session能看到自己特定的版本数据 ,版本链。
mvcc作用隔离级别:
两个隐藏列:
比对过程:
两个隔离级别的区别:
总结:
1、原子性:要么全部成功,要么全部失败。
2、一致性:总是一致性状态到另外一个一致性的状态。
3、隔离性: 一个事务不会影响到另外一个事务。
4、持久性: 事务提交完后,保存到数据库。
问题:
1、原子性:锁不释放,setnx 解决;
2、过期时间超时:任务执行时超出,看门狗机制 ,锁过时间的三分之一时间的定时器(默认30秒)
3、可重入:递归查询、类似AQS机制,计数;
4、误删:uuid + lua
5、异步复制实现高可用性:多个master集群,红锁、redLock,n/2+1 , 总体比对时间不能超过过期时间
ziplist: 元素数量超过128个,所有元素大小超过64字节。
skiplist:
设计理念:链表的基础上建立多层索引(最高32层),空间换时间。
底层数据结构: zskiplist: tail,head,length,level , zskiplistnode: 节点
每个节点有1~32层的层数, 前进指针+跨度
1、缓存雪崩:大量数据过期,访问数据库
加随机时间,互斥锁,数据预热
2、缓存穿透:缓存和数据库都没有数据
应用层校验,设置短期的空数值,布隆过滤器
3、缓存击穿:缓存没有数据 ,高并发下访问数据库
热点数据,排队
1、String :字符串
2、List :
3、set: 粉丝
4、zset: 排序
5、hash : 字典
用途:session共享、坐标、大数据基数统计、计数器。
1、先修改数据再删除缓存,存在读取历史缓存问题。
2、先删除缓存再修改数据,存在未修改前缓存数据。
3、在第二个方案基础上,过段时间删除缓存。
1、rdb: save、bgsave (fork子进程)、多组 save m n (基于bgsave,二进制 dump.rdb,全量同步)
2、aof: log文件,定期覆盖压缩 ,操作系统缓存,定时去查找数据,每次修改,由操作系统决定。
3、rdb+aof 默认启用aof
1、定时删除:定时器 、节省内存、浪费cpu资源。
2、惰性删除:查询再判断,内存浪费
3、定期删除:设置执行时间和扫描耗时,平衡执行效率和限时
分桶,随机20key
1、二叉树、二叉查找树、平衡二叉树,红黑树、b树、b+树
优点:
非叶子节点只需要存放索引不储存数据 ,数据页固定,存放更多数据;
插入、删除 ,冗余节点不会导致树变形;
叶子节点是双向链表,按顺序存放,有利于范围查询。
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
spring 支持依赖注入
autowrite 启动就加载到IOC 容器(require=false)、type方式 ;
存在问题及解决方案:
存在多个bean ,执行
@Primay : 优先加载这个 bean
@Quifilter: 过滤数据
resource 获取才加载,name方式 也可以指定type
如果指定情况下会优先使用name => type