Redis 持久化
Redis的强劲性能很大程度上是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,例如: (1) 将Redis作为数据库使用(存储历史数据)。 (2) 将Redis作为缓存服务器使用,如果缓存被穿透后会对性能造成很大影响,所有缓存同时失效会导致缓存雪崩,从而使服务器无法响应。 这时,我们希望Redis能将数据从内存中以某种方式同步到硬盘中,当服务器重启后可以根据硬盘中的记录恢复数据,这一过程就是持久化。 写操作的流程 首先我们来看一下数据库在进行写操作时到底做了哪些事,主要有下面五个过程。 1.客户端向服务端发送写操作(数据在客户端的内存中) 2.数据库服务端接收到写请求的数据(数据在服务端的内存中) 3.服务端调用write(2) 这个系统调用,将数据往磁盘上写(数据在系统内存的缓冲区中) 4.操作系统将缓冲区中的数据转移到磁盘控制器上(数据在磁盘缓存中) 5.磁盘控制器将数据写到磁盘的物理介质中(数据真正落到磁盘上) 写操作大致有上面5个流程,下面我们结合上面的5个流程看一下各种级别的故障。 •当数据库系统故障时,这时候系统内核还是OK的,那么此时只要我们执行完了第3步,那么数据就是安全的,因为后续操作系统会来完成后面几步,保证数据最终会落到磁盘上。 •当系统断电,这时候上面5项中提到的所有缓存都会失效,并且数据库和操作系统都会停止工作