一、Redis持久化
1、为什么要进行Redis持久化
将内存中的数据持久化到硬盘是为了在之后可以重用这些数据或者是为了防止系统故障而将数据备份到一个远程位置。
2、Redis持久化配置选项
二、Redis持久化方式
1、快照持久化
Redis可以通过创建快照来获取存储在内存里面的数据在某个时间节点的副本,在创建快照之后,用户对快照进行备份。
1.2、举例说明
用户在上午11:00创建了快照。在12:00的之前又有100个键进行了更新,假设12:02快照完成,假如在12:00~12:02的时候系统发生了崩溃,那么Redis只会丢失在十一点到十二点之间更新的这100个key
1.3、创建快照的方式
1.4、注意事项
1)在使用快照的方式的时候,因为如果系统发生崩溃,那么系统会丢失最近一次的快照之后的新增或者修改的数据,所以快照的方式只适用于那么即使丢失部分数据但是也不会对系统产生影响的应用程序。
2)在我们进行数据恢复的时候,我们首先就要知道我们丢失了哪些数据,所以我们需要对日志文件进行处理。
3)伴随着Redis占用内存的增多,BGSAVE创建子进程的时间可能也越来越多,导致Redis性能降低甚至无法使用的情况,这时候我们可以采取关闭自动保存,改为手动保存的的方式,手动保存可能也会导致卡顿的现象,但是唯一不同的是手动保存的方式我们可以控制卡顿的时间
1.5、AOF持久化
AOF持久化会将被被执行的写命令写到AOF文件的末尾,以此来记录数据发生的变化,因为Redis只需要从头到尾执行一下AOF文件中的命令,便可以来恢复AOF文件所记录的数据集。
注意事项:
1)因为Redis会不断的将写命令记录到AOF文件里面,伴随着Redis的运行,AOF文件会不断的增大,最终导致AOF文件用完了硬盘的所有空间,2)如果Redis重启,那么Redis需要执行AOF文件中的所有的写命令来还原数据集,所以如果AOF文件特别大的话,那么执行命令的时间可能就会非常的长
解决方式:
用户可以向Redis发送BGREWRITEAOF命令,这个命令会通过移除AOF中的冗余命令来尽可能的较小AOF文件的体积,工作原理:Redis会通过创建一个子进程来负责对AOF文件的重写。
二、复制
1.1 介绍
尽管Redis的性能十分的优秀,但是他也会遇到没有办法快速处理请求的情况,特别是在集合和有序集合的时候,涉及的数据可能又上万个甚至百万个,在这种情况下执行操作花费的时间可能就非常长。
在需要扩展读请求的时候,或者在需要写入临时数据的时候,用户可以通过设置额外的Redis从服务器来保存数据集的副本,在接受到主服务器的数据初始副本之后,客户端每次想主服务器进行写入时,从服务器都会实时得到更新,在部署好从服务器之后,客户端就可以从一个从服务器发送读请求,而不必再向之前一样,总是把每个请求都发送给主服务器
1.2、配置
首先需要配置的就是dir和dbfilename选项,并且这两个指示的路径和文件对于Redis都是可写的
在启动Redis服务器的时候指定一个slaveof host port选项的配置文件,那么Redis服务器将根据给定的ip和port来连接指定的主服务器,用户也可以通过slaveof no on来阻止从服务器终止复制操作。
1.3、更换故障服务器
如果在系统运行的过程中,出现服务器断开连接,那么该怎么办?
假设A为主服务器,B为从服务器,A发生故障,那么新开一个C服务器,首先B服务器发送一个SAVE命令,创建一个新的快照文件,并且将这个快照文件发送给机器C,并在C上面启动Redis,最后让C成为B的主服务器
更换故障服务器代码清单: