003、Redis的持久化配置
本文最后更新于 66 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

Redis的持久化配置

一.Redis持久化概述

    Redis持久化:
        指的是将内存数据保存到磁盘。Redis给我们提供了两种持久化的功能,分比为RDB和AOF。

    RDB持久化:
        可以在执行的时间间隔内生成数据集的时间点快照(point-in-time snapshot),新快照会覆盖老快照。
        优点:
            速度快,适合于用于做备份,主从复制也是基于RDB持久化功能实现的。
        缺点:
            会有数据丢失。

    AOF持久化:
        记录服务执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。
        AOF文件中的命令全部以Redis协议的格式来保存,新命令会被追加到文件的末尾(append-only log file)。
        优点:
            可以最大程度保证数据不丢失。其类似于MySQL的binlog日志功能。
        缺点:
            日志记录量级比较大,持久化时间较长。

二.配置RDB持久化功能

1.手动触发持久化

    如下所示的配置文件中,并不会自动进行持久化操作,但我们可以通过"SAVE"命令来手动触发持久化。
        [root@redis201.oldboyedu.com ~]# cat /oldboyedu/softwares/redis/conf/redis.conf 
        daemonize yes
        port 6379
        logfile "/oldboyedu/logs/redis/redis.log"
        dir "/oldboyedu/data/redis"
        dbfilename "mydump.rdb"
        bind 172.200.1.201 127.0.0.1
        requirepass "oldboyedu2021"
        # Generated by CONFIG REWRITE
        maxmemory 27343750kb
        [root@redis201.oldboyedu.com ~]# 

    (1)当修改数据后,并不会立即发生持久化:
        [root@redis201.oldboyedu.com ~]# ll /oldboyedu/data/redis/
        总用量 0
        [root@redis201.oldboyedu.com ~]# 
        [root@redis201.oldboyedu.com ~]# redis-cli -a oldboyedu2021 -h 172.200.1.201 -p 6379
        172.200.1.201:6379> SET name "JasonYin"
        OK
        172.200.1.201:6379> 
        172.200.1.201:6379> GET name
        "JasonYin"
        172.200.1.201:6379> 
        172.200.1.201:6379> QUIT
        [root@redis201.oldboyedu.com ~]# 
        [root@redis201.oldboyedu.com ~]# ll /oldboyedu/data/redis/
        总用量 0
        [root@redis201.oldboyedu.com ~]# 

    (2)但是我们可以通过"SAVE"命令来手动触发持久化:
        [root@redis201.oldboyedu.com ~]# redis-cli -a oldboyedu2021 -h 172.200.1.201 -p 6379
        172.200.1.201:6379> GET name
        "JasonYin"
        172.200.1.201:6379> 
        172.200.1.201:6379> SAVE  # 调用该命令后,会记录将内存中的数据同步到磁盘上。
        OK
        172.200.1.201:6379> 
        172.200.1.201:6379> QUIT
        [root@redis201.oldboyedu.com ~]# 
        [root@redis201.oldboyedu.com ~]# ll /oldboyedu/data/redis/
        总用量 4
        -rw-r--r-- 1 root root 97 2月  26 09:59 mydump.rdb
        [root@redis201.oldboyedu.com ~]# 
        [root@redis201.oldboyedu.com ~]# file /oldboyedu/data/redis/mydump.rdb  # 很明显,该文件还不是文本类型的文件。
        /oldboyedu/data/redis/mydump.rdb: data
        [root@redis201.oldboyedu.com ~]# 

    (3)当然,我们也可以不进入redis-cli命令的交互式字符界面就能进行持久化操作:
        [root@redis201.oldboyedu.com ~]# ll /oldboyedu/data/redis/
        总用量 4
        -rw-r--r-- 1 root root 97 2月  26 09:59 mydump.rdb
        [root@redis201.oldboyedu.com ~]# 
        [root@redis201.oldboyedu.com ~]# redis-cli -a oldboyedu2021 set age 18
        OK
        [root@redis201.oldboyedu.com ~]# 
        [root@redis201.oldboyedu.com ~]# redis-cli -a oldboyedu2021 save  # 直接进行持久化
        OK
        [root@redis201.oldboyedu.com ~]# 
        [root@redis201.oldboyedu.com ~]# ll /oldboyedu/data/redis/  # 注意观察调用命令前后文件的访问时间哟~
        总用量 4
        -rw-r--r-- 1 root root 104 2月  26 10:04 mydump.rdb
        [root@redis201.oldboyedu.com ~]# 

2.配置RDB自动持久化相关参数

    配置RDB持久化:
        [root@redis201.oldboyedu.com ~]# vim /oldboyedu/softwares/redis/conf/redis.conf 
        [root@redis201.oldboyedu.com ~]# 
        [root@redis201.oldboyedu.com ~]# tail -6 /oldboyedu/softwares/redis/conf/redis.conf 
        # RDB持久化配置
        dir "/oldboyedu/data/redis"
        dbfilename "mydump.rdb"
        save 900 1
        save 300 10
        save 60 10000
        [root@redis201.oldboyedu.com ~]# 

    参数说明:
        dir:
            指定数据目录的存储路径,尤其是我们将Redis当做数据库用时,需要用到数据的持久化功能。
        dbfilename:
            指定RDB持久化数据文件的名称。
        save 900 1:
            900秒(15分钟)内有1个更改就会进行持久化。            
        save 300 10:
            300秒(5分钟)内有10个更改就会进行持久化。
        save 60 10000:
            60秒(1分钟)内有10000个更改就会进行持久化。

    温馨提示:
        (1)上述的save参数是用于定义自动持久化的参数,上面我们定义了3种策略,但凡满足其中任意一种策略均能实现自动持久化。
        (2)测试可以使用“kill -9”指令杀死redis-server进程,如果使用官方提供的shutdown脚本会在关掉redis实例之前可能会自动进行一次持久化哟~

三.配置AOF持久化功能

    如下所示,配置AOF持久化通常只需指定两个参数即可:
        [root@redis201.oldboyedu.com ~]# vim /oldboyedu/softwares/redis/conf/redis.conf 
        [root@redis201.oldboyedu.com ~]# 
        [root@redis201.oldboyedu.com ~]# tail -3 /oldboyedu/softwares/redis/conf/redis.conf 
        # 配置AOF持久化
        appendonly yes
        appendfsync everysec
        [root@redis201.oldboyedu.com ~]# 

    参数说明:
        appendonly:
            如果其值为"yes",表示开启AOF持久化的功能。
        appendfsync:
            指定AOF的触发条件,有3个值如下所示:
                always:
                   表示每次操作成功都会记录。 但如果刚刚好Redis内存中操作成功了,正要持久化时突然断电的话,这意味着本次记录可能会丢失,但仅丢失一次的话估计多数情况下是可以容忍的。
                everysec:
                    每秒钟进行持久化功能,理想情况下可能会丢失1秒内的数据。
                no:
                    表示不指定触发AOF机制。

四.持久化相关的面试题

1.Redis持久化方式有哪些?有什么区别?

    RDB:
        基于快照的持久化,速度更快,一般用作备份,主从复制也是依赖于RDB持久化功能。

    AOF:
        以追加的方式记录Redis操作日志的文件,可以最大程度的保证Redis数据安全,类似于mysql的binlog功能。

2.save和bgsave区别

    共同点:
        都能实现RDB持久化功能。

    不同点:
        SAVE:
            前台进行持久化,会阻塞redis正常写入,直到持久化完成。
        BGSAVE:
            后台进行持久化,会开启子线程进行异步的持久化功能,不会阻塞redis正常写入。
谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇