一、MYSQL
1.1、MYSQL架构和SQL执行流程
sql执行流程:
通信协议(TCP/IP SOCKET)-》查询缓存(mysql8 去掉此功能)-》语法解析和预处理-》查询优化和查询执行计划-》存储引擎-》执行引擎
mysql架构分层:
连接层-》服务层-》存储引擎
InnDB内存结构和磁盘结构:
内存结构:
Buffer Pool、Change Buffer写缓冲、Adaptive Hash Index、Log Buffer(Redo log)
磁盘结构:
系统表空间、独占表空间、通用表空间、临时表空间、Redo log、undo log
1.2、MYSQL索引深入解析
索引存储模型推演:
二分查找-》二叉查找树-》平衡二叉树(左旋、右旋)-》多路平衡查找树(B Tree)(分裂、合并) -》加强版多路平衡查找树(B+ Tree)
InnoDB逻辑存储结构:
表空间(Table Space)-》段(Segment)-》簇/区(Extent)-》页(Page)-》行(Row)
索引使用原则:
列的离散度大、联合索引最左匹配、索引覆盖、索引条件下推
1.3、MYSQL事务与锁详解:
事务的四大特性:
原子性(依靠undo log实现)、一致性、隔离性、持久性(redo log + double write实现)
数据库隔离的四大级别:
未提交读、已提交读、可重复读、串行化
不可重复读和幻读,的区别在那里呢?
不可重复读是修改或者删除操作,幻读是插入操作。
MYSQL innoDB 锁的基本类型:
共享锁(读锁)、排他锁(写锁)、意向锁(表锁)
行锁的原理:
行锁实际锁的是主键索引,如果没有设置主键索引或唯一索引则锁表
锁的算法:
记录锁、间隙锁、临键锁
查看锁表信息:
-- 查看锁信息
show status like 'innodb_row_lock_%';
-- 当前运行的所有事务 ,还有具体的语句
select * from information_schema.INNODB_TRX;
-- 当前出现的锁
select * from information_schema.INNODB_LOCKS;
-- 锁等待的对应关系
select * from information_schema.INNODB_LOCK_WAITS;
二、REDIS
2.1、Redis基本数据类型:
String字符串(INT->embstr->raw)、Hash哈希(ziplist->hashtable)、List列表(quicklist)、Set集合(intset>hashtable)、ZSet有序集合(ziplist->skiplist)
2.2、Redis原理:
1、Redis底层用lua脚本执行
2、Redis持久机制:RDB(恢复速度快、消耗CPU小)和AOF(丢失数据少),但是一般情况下建议不要单独使用某一种持久化机制,而 是应该两种一起用
3、Redis为什么这么快:内存存储、单线程、异步非阻塞
2.3、Redis分布式:
1、为什么需要redis集群:性能、扩展、可用性
2、Redis主从复制
3、哨兵机制
4、Redis客户端:Jedis、Luttece、Redisson