zoukankan      html  css  js  c++  java
  • Redis管理之持久化

    Redis的一大重要特征就是支持持久化。

    Redis提供了两种不同的持久化方式:RDB和AOF。 RDB持久化可以在指定的时间间隔内生成数据集的快照。由于是定期的生成数据集的快照,所以,如果服务器出现异常停止的时候,那可能就会造成上一次备份后面的数据没有被保存下来。

    AOF持久化以纯文本的方式记录了所有的操作命令。aof支持不同的fsync策略,可以选择每秒fsync,默认是每秒。如果在写的时候出现宕机,也可以通过redis-check-aof工具来修复aof备份文件。

    这两种持久化方式也可以同时使用。

    持久化配置

    RDB方式:在默认情况下,Redis将数据库快照保存在名字为dump.rdb的二进制文件中,也可以通过配置文件配置。

    可以通过配置文件来决定RDB保存的条件,也可以通过SAVE或者BGSAVE命令来显示的执行保存操作。

    例如:save 60 1000的意思是 60秒内至少有1000个键被改动过的话就自动保存一次数据集。

    默认情况下是启用RDB方式持久化的。

    save 900 1
    save 300 10
    save 60 10000

    默认情况下,没900秒内有一个key被改动就保存,没300秒内有10个key被改动就保存,每60秒内有1万个key被改动就保存。

    dbfilename dump.rdb:指定了保存的文件名。

    dir ./:指定了保存的路径为当前目录,更改为/usr/local/redis

    AOF方式:aof方式的启动只需要配置一个appendonly yes的选项就可以。

    aof支持下面几种持久化策略:

    1、每次有新命令就执行一次fsync

    2、没秒执行一次fsync(默认)

    3、从不fsync。

    appendonly no:默认情况下没有开启,修改为yes就是开启。

    appendfilename "appendonly.aof":默认的持久化文件名称。

    # appendfsync always
    appendfsync everysec:默认开启这个,每秒fsync一次。
    # appendfsync no

    RDB方式测试

    [root@localhost 13:14 /usr/local/redis]# ll
    总用量 276
    -rw-rw-r--.  1 root root 127778 7月  24 22:58 00-RELEASENOTES
    -rw-rw-r--.  1 root root     53 7月  24 22:58 BUGS
    -rw-rw-r--.  1 root root   1815 7月  24 22:58 CONTRIBUTING
    -rw-rw-r--.  1 root root   1487 7月  24 22:58 COPYING
    drwxrwxr-x.  6 root root   4096 8月  15 19:35 deps
    -rw-rw-r--.  1 root root     11 7月  24 22:58 INSTALL
    -rw-rw-r--.  1 root root    151 7月  24 22:58 Makefile
    -rw-rw-r--.  1 root root   4223 7月  24 22:58 MANIFESTO
    -rw-rw-r--.  1 root root  20530 7月  24 22:58 README.md
    -rw-rw-r--.  1 root root  57765 9月   3 11:32 redis.conf
    -rwxrwxr-x.  1 root root    271 7月  24 22:58 runtest
    -rwxrwxr-x.  1 root root    280 7月  24 22:58 runtest-cluster
    -rwxrwxr-x.  1 root root    281 7月  24 22:58 runtest-sentinel
    -rw-rw-r--.  1 root root   7606 7月  24 22:58 sentinel.conf
    drwxrwxr-x.  3 root root   4096 9月   9 12:55 src
    drwxrwxr-x. 10 root root   4096 7月  24 22:58 tests
    drwxrwxr-x.  8 root root   4096 7月  24 22:58 utils
    [root@localhost 13:14 /usr/local/redis]# redis-cli
    127.0.0.1:6379> set name zhangsan
    OK
    127.0.0.1:6379> shutdown save
    not connected> exit
    [root@localhost 13:18 /usr/local/redis]# ll
    总用量 280
    -rw-rw-r--.  1 root root 127778 7月  24 22:58 00-RELEASENOTES
    -rw-rw-r--.  1 root root     53 7月  24 22:58 BUGS
    -rw-rw-r--.  1 root root   1815 7月  24 22:58 CONTRIBUTING
    -rw-rw-r--.  1 root root   1487 7月  24 22:58 COPYING
    drwxrwxr-x.  6 root root   4096 8月  15 19:35 deps
    -rw-r--r--.  1 root root    177 9月   9 13:18 dump.rdb
    -rw-rw-r--.  1 root root     11 7月  24 22:58 INSTALL
    -rw-rw-r--.  1 root root    151 7月  24 22:58 Makefile
    -rw-rw-r--.  1 root root   4223 7月  24 22:58 MANIFESTO
    -rw-rw-r--.  1 root root  20530 7月  24 22:58 README.md
    -rw-rw-r--.  1 root root  57765 9月   3 11:32 redis.conf
    -rwxrwxr-x.  1 root root    271 7月  24 22:58 runtest
    -rwxrwxr-x.  1 root root    280 7月  24 22:58 runtest-cluster
    -rwxrwxr-x.  1 root root    281 7月  24 22:58 runtest-sentinel
    -rw-rw-r--.  1 root root   7606 7月  24 22:58 sentinel.conf
    drwxrwxr-x.  3 root root   4096 9月   9 12:55 src
    drwxrwxr-x. 10 root root   4096 7月  24 22:58 tests
    drwxrwxr-x.  8 root root   4096 7月  24 22:58 utils
    [root@localhost 13:18 /usr/local/redis]#

    发现,已经有dump.rdb文件了。

    我们重新启动服务器查看:

    [root@localhost 13:19 /usr/local/redis]# service redis start
    Starting Redis server...
    3925:C 09 Sep 13:20:03.909 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    3925:C 09 Sep 13:20:03.910 # Redis version=4.0.1, bits=32, commit=00000000, modified=0, pid=3925, just started
    3925:C 09 Sep 13:20:03.910 # Configuration loaded
    [root@localhost 13:20 /usr/local/redis]# redis-cli
    127.0.0.1:6379> keys *
    1) "name"
    127.0.0.1:6379>

    可以看到,此时的keys还是存在的。

    但是,如果我们把dump文件移动到别的地方呢?

    [root@localhost 13:21 /usr/local/redis]# service redis start
    Starting Redis server...
    3948:C 09 Sep 13:22:03.371 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    3948:C 09 Sep 13:22:03.371 # Redis version=4.0.1, bits=32, commit=00000000, modified=0, pid=3948, just started
    3948:C 09 Sep 13:22:03.371 # Configuration loaded
    [root@localhost 13:22 /usr/local/redis]# redis-cli
    127.0.0.1:6379> keys *
    (empty list or set)
    127.0.0.1:6379>

    发现,keys又不存在了,如果我们把dump文件在拿回来,又可以继续读取到。这就可以用来实现备份和恢复了。

    AOF方式测试

    需要注意的是,当rdb方式和aof方式同时开启的时候,服务器重启会优先读取aof的文件。

    修改配置文件如下:

    appendonly yes

    [root@localhost 13:32 /usr/local/redis]# redis-cli
    127.0.0.1:6379> keys *
    (empty list or set)
    127.0.0.1:6379> set name lisi
    OK
    127.0.0.1:6379> set name wangwu
    OK
    127.0.0.1:6379> get name
    "wangwu"
    127.0.0.1:6379> shutdown
    not connected> exit
    [root@localhost 13:34 /usr/local/redis]# ll
    总用量 284
    -rw-rw-r--.  1 root root 127778 7月  24 22:58 00-RELEASENOTES
    -rw-r--r--.  1 root root     91 9月   9 13:33 appendonly.aof
    -rw-rw-r--.  1 root root     53 7月  24 22:58 BUGS
    -rw-rw-r--.  1 root root   1815 7月  24 22:58 CONTRIBUTING
    -rw-rw-r--.  1 root root   1487 7月  24 22:58 COPYING
    drwxrwxr-x.  6 root root   4096 8月  15 19:35 deps
    -rw-r--r--.  1 root root    175 9月   9 13:34 dump.rdb
    -rw-rw-r--.  1 root root     11 7月  24 22:58 INSTALL
    -rw-rw-r--.  1 root root    151 7月  24 22:58 Makefile
    -rw-rw-r--.  1 root root   4223 7月  24 22:58 MANIFESTO
    -rw-rw-r--.  1 root root  20530 7月  24 22:58 README.md
    -rw-rw-r--.  1 root root  57765 9月   3 11:32 redis.conf
    -rwxrwxr-x.  1 root root    271 7月  24 22:58 runtest
    -rwxrwxr-x.  1 root root    280 7月  24 22:58 runtest-cluster
    -rwxrwxr-x.  1 root root    281 7月  24 22:58 runtest-sentinel
    -rw-rw-r--.  1 root root   7606 7月  24 22:58 sentinel.conf
    drwxrwxr-x.  3 root root   4096 9月   9 12:55 src
    drwxrwxr-x. 10 root root   4096 7月  24 22:58 tests
    drwxrwxr-x.  8 root root   4096 7月  24 22:58 utils
    [root@localhost 13:34 /usr/local/redis]#

    查看appendonly.aof的文件内容:

    [root@localhost 13:34 /usr/local/redis]# cat appendonly.aof
    *2
    $6
    SELECT
    $1
    0
    *3
    $3
    set
    $4
    name
    $4
    lisi
    *3
    $3
    set
    $4
    name
    $6
    wangwu
    [root@localhost 13:35 /usr/local/redis]#

    重新启动服务器查看:

    [root@localhost 13:36 /usr/local/redis]# redis-cli
    127.0.0.1:6379> keys *
    1) "name"
    127.0.0.1:6379> get name
    "wangwu"
    127.0.0.1:6379>

    这就完成了redis的持久化配置了 。

  • 相关阅读:
    【解决方案】智能汽车制造车间通过EasyNVR实现无插件视频监控直播方案
    EasyNVR拉流成功后快照正常但实际不能播放解决方法
    EasyNVR现场设备离线后无法自动重连如何优化?
    TSINGSEE青犀视频优化EasyNVR快照保存机制实现过程
    EasyNVR中如何对kernel内核的异常关闭状态做监测?
    EasyNVR帐号密码无法正常登入系统界面问题排查
    EasyNVR使用HLS格式播放视频一段时间后自动停止的问题排查
    EasyNVR使用Mysql数据库无法启动该怎么处理?
    EasyNVR直播录像呈现片段式显示与什么有关?
    EasyNVR配置表单上传demo说明
  • 原文地址:https://www.cnblogs.com/zerotomax/p/7499215.html
Copyright © 2011-2022 走看看