官网地址:Redis persistence | Redis
Redis持久化是将内存中的数据保存到磁盘,以防止数据丢失。Redis提供了两种持久化方式:RDB和AOF。
reids是内存数据库,内存一断电或者宕机数据就消失了没有了,需要redis中的数据长期持有,它重启宕机恢复过来之后还是能从磁盘读回之前的数据
使用RDB(Redis Database)或者AOF(Append Only File)还可以RDB和AOF混合使用将数据写入磁盘
RDB(Redis 数据库):RDB 持久性以指定的时间间隔执行数据集的时间点快照
RDB持久化方式将Redis服务器中某个时间点的所有键值对集合写入一个快照文件。这个快照文件可以在Redis发生宕机时用于数据恢复。
RDB持久化方式的优点是在恢复数据时速度较快,缺点是如果Redis服务器宕机时未保存快照文件,会丢失部分数据。
为了解决这个问题,可以使用自动备份机制和设置持久化时间来进行保护。在Redis.conf文件中可以设置save参数,表示在多长时间内,至少有n个key发生变化时,就会启动一次自动备份。同时也可以设置备份目录和备份文件名,定期备份Redis中的数据,建议每天进行一次。
按照redis.conf里配置文件的save
5秒钟修改两次
433 # save 3600 1 300 100 60 10000
434 save 5 2
以日志的形式来记录每一个写操作,将redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
默认情况下,redis是没有开启AOF(append only file)的。开启AOF功能需要设置配置:appendonly yes
AOF持久化方式是通过记录Redis执行过的写命令来恢复数据。当Redis服务器重启时,会通过执行AOF文件中的命令来恢复数据。AOF持久化方式相对于RDB持久化方式而言,可靠性更高,但磁盘消耗较大。
用户可以通过配置文件设置AOF文件的名称和同步方式等参数,有always、everysec和no三种同步策略可供选择。当使用always策略时,每次写操作完成后都会立即将数据同步到磁盘中;当使用everysec策略时,Redis会每秒钟同步一次到磁盘中;而使用no策略时,Redis会尽可能把同步写操作的负载分担到系统的后台写任务中去。
为了保证Redis的数据安全性,在使用AOF持久化方式时,可以选择使用Redis Sentinel来进行管理和监控。这样可以在主节点出现问题时,自动进行切换,保证Redis服务不受影响。
快照功能并不是非常耐久(dura ble): 如果 Redis 因为某些原因而造成故障停机, 那么服务器将丢失最近写入、且仍未保存到快照中的那些数据。 从 1.1 版本开始, Redis 增加了一种完全耐久的持久化方式: AOF 持久化。
你可以在配置文件中打开AOF方式:
appendonly yes
从现在开始, 每当 Redis 执行一个改变数据集的命令时(比如 SET), 这个命令就会被追加到 AOF 文件的末尾。这样的话, 当 Redis 重新启时, 程序就可以通过重新执行 AOF 文件中的命令来达到重建数据集的目的。
你也可以同时开启两种持久化方式, 在这种情况下, 当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整
优点
缺点
优点
缺点
在同时开开启rdb和aof持久化,重启是只会加载aof文件,不会加载rdb文件
在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集比RDB文件保存的数据集要完整
RDB的数据不实,同时使用两者是服务器重启也只会找AOF文件,那要不要只使用AOF呢?
作者建议不要,因为RDB跟适合用于备份数据库(AOF在不断变化不好备份),留着RDB作为一个万一的手段
RDB+AOF混合方式
结合了RDB和AOF的优点,既能快输加载又能避免丢失过多的数据
aof-use-rdb-preamble
来开启这种持久化方式。aof-use-rdb-preamble yes
先使用RDB进行快照存储,然后使用AOF持久化记录所有写操作,当重写策略满足或手动触发重写的时候,将最新的数据存储为新的RDB记录。这样的话,重启服务器的时候会从RDB和AOF两部分恢复数据,既能保证数据完整性,又能提高恢复数据的性能
在实际应用中,使用Redis持久化时需要注意以下问题: