概念:是一种速度非常快的非关系型数据库,他可以存储键(key)和五种不同类型的值(value)之间的映射,也可以把存储在内存的键值对持久化到硬盘,通过复制特性来扩展读性能,通过客户端分片来扩展写性能
背景:由于redis的数据都存放在内存中,如果没有持久配置重启redis后数据就全丢失了,所以就要开启持久化功能,把内存的数据保存在磁盘上。当redis重启后,会从磁盘中恢复数据。
redis的两种持久化:
RDB:把redis在内存中的数据定时到磁盘的RDB进行持久化
优势:
1,可以对redis数据库进行完美备份,可以每小时归档 24小时的数据,可以每天归档一次近30天的数据。通过这种备份策略,可以在发生灾难性故障后,很容易的进行数据恢复。
2,进行持久化是只需要fork应该子进程,在这个子进程上进行持久化的操作,可以避免服务器执行IO操作
3,相对于AOF而言,如果数据量很大,RDB的启动效率会更高
劣势
1,RDB无法最大限度保证数据的丢失,如果在定时持久化之前出现事故,还没来得及写入硬盘数据就丢失了
2,由于RDB是通过fork子进程来完成持久化的,所以当数据量过大时,就会增大服务器的压力。
AOF:以文本的形式记录服务器所处理的每一个写,删除操作(查询操作不会记录)。
AOF日志在运行时持续增大,所以就要定时对日志进行瘦身,所以就会存在rewrite机制,rewrite机制和RDB的快照写入的过程类似。当在写入过程中出现了变更操作,这些操作会被redis收集起来,一起被写入到被瘦身的AOF日志
优势:
1,AOF带来了更高级别的安全性即数据持久性,redis提供了每秒同步,每修改同步,不同步。每秒同步的效率最高,但是一旦出现事故现象,这一秒的数据就丢失了。每修改同步就是每次修改都会被记录在磁盘中,不足在于效率太低
2,AOF在写数据库日志文件时使用的是append模式,即使在写入时发生事故,也不会对之前的数据进行损坏
3,我们可以根据AOF日志文件,完成数据的重建
4,AOF只是追加日志文件,对服务器的影响小,速度比RDG快
劣势
1,需要不断的进行rewrite对日志文件进行瘦身
2,即使瘦身后,日志文件依然很大
3,AOF的数据还原比RDG的慢