c# redis之持久化方案

 数据持久化

由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),另外一种是AOF(append only file)持久化(原理是将Reids的操作日志以追加的方式写入文件)。

记住,RDB和AOF最好任选一种,如果其中一种不使用请在配置文件中禁用,因为不熟悉的话很容易弄混,因为2者服务器挂了之后的启动方式不一样,如果启动方式不对很容易把自己绕进去。

RDB

RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。

具体制定的时间是在这个配置文件可以配置的,下面是默认的一个时间。从下往上看save 60 10000 表示如果6秒内如果写入1万次,就会自动保存到硬盘中去。如果300秒内超过10次,也是如此;900秒内超过1次同理,但是这样不推荐。实现了下面的任意条件都可以自动触发BgSave命令,下面我们也会讲解怎么手动触发。

 

 

(1)Save

 如果我们需要移动服务器,我们总不能这样等待,所以可以通过save命令来直接保存到硬盘上,但是 由于redis是单线程模型,期间会阻塞redis服务进程,redis服务不再处理任何指令,直到rdb文件创建完成,所以这样的话就会出问题,正在进行的redis写入就会被中断 

(2)BgSave

父进程启动一个子进程,由子进程将内存保存在硬盘文件,期间不会影响其他指令的操作。

 

 看上图,执行了BgSave命令之后关闭redis-server.exe,模拟服务器宕机,再次开启之后get name获取,又重新获取到值了。 

 

缺点

如果服务器突然挂了,但是还没有满足自动触发的条件的话,那么数据就会丢失。

还有就是万一当前存储的数据量很大,那么在存储的时候就会耗性能

优点

还原很方便,性能很好。

AOF

AOF的性能相较于RDB是比较不错的,数据安全性更高,但是还原性能比较差。所以说大数据做迁移的时候RDB更好

 

 

(1)配置步骤 

首先需要在配置文件中做配置,确保能够使用AOF方式,yes表示使用AOF,no表示禁用:

 

 然后进行启动,需要注意,需要在配置文件中进行启用,就是说在配置文件的文件夹下,看红框,按照图中的样式输入cmd,回车:

 

 然后在命令窗口启动配置文件:

 这时候就会发现当前目录下多了一个文件,这时候如果还没有写值的话,里面就是空的,这就是AOF方式将数据保存在这里存储在硬盘中:

 

 现在写一个数据,写入id为11:

 

 然后我们把这2个命令窗口关闭,模拟redis服务器宕机,然后按照上面方式再次开启,cmd的形式执行一次已经保存的aof文件,就可以恢复以前的数据。现在直接获取id值:

 可以看到直接就能获取到值了。

(2)三种追加方式

 

在配置文件中默认的是:

 

 (3)aof文件内容解读

 

 *后面表示这次命令一共存了几个参数,上面这个文件里面的内容是分2次命令写入的。

第一个命令中的SELECT其实对应了命令窗口中的get,在这里转换成了SELECT,第二个红框中也可以解析成set name clay。

(4)AOF重写机制 

 

posted @ 2021-10-08 23:06  安静点--  阅读(802)  评论(0编辑  收藏  举报