zoukankan      html  css  js  c++  java
  • Redis持久化机制

    什么是Redis持久化?
    redis如果将数据保存在内存中,机器宕机重启,数据会丢失,如果我们把数据保存在磁盘中,如果机器宕机重启后,数据不会丢失,这就是持久化的过程。

    Redis持久化有两种方式:

    • RDB方式
    • AOF方式

    什么是RDB方式?
    RDB通过快照方式完成,当符合一定条件时,Redis会自动将内存中的数据进行快照并存储在磁盘中。进行快照的条件在配置文件中指定,有两个参数构成:时间和改动的键的个数。当在指定时间内被改动的键的个数大于指定的键的个数时,redis就会自动进行快照。
    RDB是redis默认的持久化方式。


    默认的RDB的文件路径是当前目录,文件名是:dump.rdb。可以在配置文件中修改。


    RDB的快照过程:
    redis使用fork()函数复制一份当前进程(主进程)的副本(子进程);
    父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入到硬盘中的临时文件。
    当子进程写完之后,会用该临时文件覆盖旧的rdb文件。

    RDB文件是通过压缩的,可以通过配置rdbcompression参数来禁用压缩。


    压缩与不压缩的优缺点:
    压缩会减少磁盘存储的空间,但会消耗cpu
    不压缩会消耗磁盘存储空间,但会节约cpu

    可以用个SAVE和BGSAVE来手动快照,两个命令的区别是前者是由主进程执行快照,会阻塞其他请求,后者会创建一个fork进程来执行快照操作。


    注意:由于redis使用fork来复制一份当前的进程,那么子进程会占用与父进程一样的资源,从而导致性能会降低。

    什么是AOF方式?
    RedisAOF持久化策略是将发送到redis服务器的每一条命令都记录下来,并且保存到硬盘中的AOF文件中,AOF文件和RDB文件的位置相同,都是通过dir参数设置,默认的文件名是appendonly.aof,可以通过appendfilename参数修改。
    redis中默认不开启aof。并且appendonly.aof不会记录get命令,因为没有意义。

    可以通过BGREWRITEAOF命令来重写aof文件。
    重写的目的:去除中间命令,释放空间。

    文件的写入默认情况下会先写入到缓存中,系统每30秒同步一次,才会真正的写入到磁盘中,那么如果在这30秒服务器宕机,那么数据也会丢失,所以redis可以通过配置来修改同步策略。

    最后注意点:在恢复数据时,如果同时有appendonly.aof和dump.rdb,那么会用appendonly.aof来恢复数据。

  • 相关阅读:
    如何在Unity中播放影片
    C# typeof()实例详解
    unity3d用鼠标拖动物体的一段代码
    unity3d中Find的用法
    geometry_msgs/PoseStamped 类型的变量的构造
    c++ ros 计算两点距离
    C++ 利用指针和数组以及指针和结构体实现一个函数返回多个值
    C++ 结构体指针的定义
    Cannot initialize a variable of type 'Stu *' with an rvalue of type 'void *'
    C++中的平方、开方、绝对值怎么计算
  • 原文地址:https://www.cnblogs.com/ericz2j/p/11110580.html
Copyright © 2011-2022 走看看