目录
16.MySQL主从复制?
17.MySQL主从的延迟是怎么解决的呢?
18.MySQL读写分离方案?
19.什么是Redis,为什么用Redis?
20.为什么Redis是单线程的以及为什么这么快?
16.MySQL主从复制?
主要涉及三个线程:binlog线程、I/O线程和SQL线程。
binlog线程:负责将主服务器上的数据更改写入二进制日志中。
I/O线程:负责从主服务器上读取二进制日志,并写入从服务器的中继日志中。
SQL线程:负责读取中继日志并重新其中的SQL语句。
全同步复制
主库写入binlog后强制同步日志到从库,所有的从库都执行完成后才返回给客户端,但是很显然这个方式的话性能会受到严重影响。
半同步复制
和全同步不同的是,半同步复制的逻辑是这样,从库写入日志成功后返回ACK确认给主库,主库受到至少一个从库的确认就认为写操作完成。
17.MySQL主从的延迟是怎么解决的呢?
18.MySQL读写分离方案?
主服务器处理写操作以及实时性要求比较高的读操作,而从服务器处理读操作。
读写分离能提高性能的原因在于:
主从服务器负责各自的读和写,极大程度环节了锁的争用。
从服务器可以使用MyIISAM,提升查询性能以及节约系统开销;
增加冗余,提高可用性。
读写分离常用代理方式来实现,代理服务器接收应用层传来的读写请求,然后决定转发到哪个服务器。
19.什么是Redis,为什么用Redis?
Redis是一种支持key-value等多种数据结构的存储系统。可用于缓存,事件发布或者订阅,高速队列等场景。支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。
读写性能优异
Redis能读的速度是110000次/s,写的速度是81000次/s
数据类型丰富
Redis支持二进制案例的String,Lists,Hashes,Sets以及Ordered Sets数据类型操作。
原子性
Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
丰富的特性
Redis支持public/subscribe,通知,key过期等特性。
持久化
Redis支持RDB,AOF等持久化方式
发布订阅
Redis支持发布/订阅模式
分布式
Redis Cluster
20.为什么Redis是单线程的以及为什么这么快?
Redis完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。
数据结构简单,对数据操作也简单,Redis中的数据结构是专门设计的。
采用单线程模型,避免了必要的额上下文切换和竞争条件,也不存在多线程或者多线程切换而消耗CPU,不用考虑各种锁的问题,不存在加锁,释放锁的操作,没有因为可能出现死锁而导致性能消耗。
使用了多路IO复用模型,非阻塞IO。
使用底层模型不同,它们之间底层实现方式以及客户端之间的通信的应用协议不一样,Redis直接构建了自己的JVM机制,因为一般的系统调用函数的话,会浪费一定的时间去移动和请求。