记录一些面试问的

Mysql 的redolog和bingo

1、redolog:redolog是物理日志,记录在某个数据页上做了什么修改, 有了 redo log,InnoDB 就可以保证即使数据库发生异常重启,因为redo log 的写入机制是事务中有更新操作时就会将更新操作记录在 redo log buffer 中,在事务提交时,根据相关参数的设定,按照不同逻辑持久化到磁盘文件
2、bingo:是逻辑日志,属于mysql server层,用于灾难后的数据恢复和mysql的主从复制
3、区别:
①redolog具有crash-safe的能力,而binlog没有。
②redolog是记录在数据页上做了什么修改,而binlog记录的是语句的原始逻辑
③redolog是循环写(前面的图片已经说的很清楚了),所以binlog存在数据覆盖的问题,binlog
是追加写,一个binlog文件写满了就会再创建一个binlog文件写,所以binlog是归档日志
④binlog是事务提交的时候才从binlog cache写到binlog,而redolog有后台每1秒自动刷
盘的功能,在这点上保证了事务即使未提交时发生崩溃也能完好的恢复事务中的数据
⑤binlog属于server层,redolog属于innodb引擎特有的

websocket链接中中断怎么办,如何保证消息正确发送

加入心跳检测 ,触发重连,自己实现增加ack确认机制
###mysql深度分页优化
1、增加索引
2、限制获取的字段 先查主键再根据主键查询数据,核心在于 Innodb 的聚簇索引
3、count时大问题,采用滚动分页,通过主键id+条件 来查 使用limit 单不使用offset
###一条sql的执行过程
客户端-》检查缓存-》sql解析-》查询优化-》执行查询-》存储引擎查询数据

mysql mvcc

MVCC:控制并发
###mysql undolog
逻辑日志,可以理解为delete一条记录的时候,undo log会记录一条对应的insert记录,update一条记录的时候,undo log会记录一条相反的update记录,当事务失败需要回滚操作时,就可以通过读取undo log中相应的内容进行回滚,MVCC就利用到了undo log。

redis持久化方式

–RDB(默认):根据指定的规则“定时”将内存中的数据存储在硬盘上,生成的快照
一、优势
1.RDB是一个非常紧凑(compact)的文件,它保存了redis 在某个时间点上的数据集,这种文件非常适合用于进行备份和灾难恢复。
2.生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作。
3.RDB 在恢复大数据集时的速度比AOF的恢复速度要快。
二、劣势
•1、RDB方式数据没办法做到实时持久化/秒级持久化。因为bgsave每次运行都要执行fork操作创建子进程,频繁执行成本过高
•2、在一定间隔时间做一次备份,所以如果redis意外down掉的话,最后一次快照之后的修改数据会被丢失(数据有丢失)。
如果数据相对来说比较重要,希望将损失降到最小,则可以使用AOF方式进行持久化。

–AOF:每次执行命令后将命令本身记录下来,每次执行命令都会将命令写入到aof文件中优点:
优点:
1、AOF 持久化的方法使用默认的每秒同步一次,Redis 最多也就丢失 1 秒的数据而已。
缺点:
1、对于具有相同数据的的Redis,AOF 文件通常会比 RDB 文件体积更大(RDB存的是数据快照)。
2、虽默认情况下,每秒同步一次的频率也具有较高的性能。在高并发的情况下,RDB 比 AOF 具有更好的性能保证。