zoukankan      html  css  js  c++  java
  • 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重写机制 

  • 相关阅读:
    CSRF 攻击
    PHP中HTTP_X_FORWARDED_FOR 和 REMOTE_ADDR的使用
    PHP PDO函数库详解
    STK基础
    opnet统计结果的采集模式——capture mode
    一个博客园代码高亮的方案
    博客园TinyMCE编辑器中插入的代码块使用HTML编辑器再编辑
    local statistics和global statistics的区别
    opnet的函数中FIN、FRET和FOUT
    福昕阅读器默认打开pdf文件视图大小
  • 原文地址:https://www.cnblogs.com/anjingdian/p/15383352.html
Copyright © 2011-2022 走看看