Redis6的持久化配置你知道多少?

本文是对Redis6的持久化配置,了解什么是AOF和RDB,它们的优缺点是什么,该如何使用。

什么是Redis持久化?

我们都知道Redis是一个基于内存的数据库,如果没有给Redis配置持久化的话,每当重启后Redis的数据就会全部丢失,会很麻烦。因此Redis需要开启持久化功能,将数据保存到磁盘上,当Redis重启后可以在磁盘中恢复数据。这样缓存数据就不容易丢失了。

开启持久化的两种方式

Redis开启持久化有两种方式:RDB(Redis DataBase)与AOF(append only file)

RDB持久化

RDB其实就是把数据以快照的形式保存到磁盘上。什么是快照呢?你可以把快照理解成当前这一时刻的数据拍成一张照片保存下来。RDB持久化是指在指定的时间间隔内将内存中的数据集快照形式写入磁盘。也是默认的持久化方式,这种方式就是将内存中的数据写入到二进制文件当中,默认的文件名为dump.rdb

既然RDB机制是通过某个时刻把所有数据生成一张快照来进行保存的,那么就应该会有一种触发机制来实现这个过程。对于RDB来说,提供了三种机制:save、bgsave、自动化。

1.save触发方式:该命令会阻塞当前Redis服务器,执行save命令的时候,Redis不能处理其他的命令,直到RDB过程执行完成为止。执行完成的时候如果存在老的RDB文件,就会把新的替换掉旧的。

2.bgsave触发方式:执行该命令的时候,Redis会在后台进行异步快照操作,快照的同时还可以响应客户端的请求,具体的操作是Redis进程执行fork操作创建了一个子进程,而RDB持久化过程由子进程负载,完成后自动结束。阻塞只发生在子进程。

3.自动化触发:由配置文件来完成,配置触发Redis的RDB持久化条件。

RDB有何优缺点?

优点:

(1)RDB文件紧凑,全量备份,比较适用于备份和灾难恢复

(2)生成RDB文件的时候,Redis主进程会开启让一个子进程来完成所有的保存操作,主进程不需要任何的IO操作

(3)RDB在恢复大数据集的时候速度快。

缺点:

因为RDB快照是一次全量备份的,存储的是内存数据二进制形式,在存储上会非常的紧凑。当进行快照持久化时,会开启一个子进程负载快照的持久化,子进程会拥有父进程的内存数据,父进程修改内存子进程不会反应出来,所有当在快照持久化时修改的数据不会得以保存,还有可能导致丢失数据。

核心配置:(dbfilename 文件名,dir持久化文件的路径)

#任何ip可以访问
bind 0.0.0.0
#守护进程
daemonize yes
#密码
requirepass 123456
#⽇志⽂件
logfile "/usr/local/redis/log/redis.log"
#持久化⽂件名称
dbfilename xdclass.rdb
#持久化⽂件存储路径
dir /usr/local/redis/data
#持久化策略, 10秒内有个1个key改动,执⾏快照
save 10 1
######之前配置######
#导出rdb数据库⽂件压缩字符串和对象,默认是yes,会浪费
CPU但是节省空间
rdbcompression yes
# 导⼊时是否检查
rdbchecksum yes
复制代码

RDB操作实战

配置文件(根据自行需要配置)

bind 0.0.0.0
daemonize yes
requirepass 123456Xdclass
logfile "/usr/local/redis/log/redis.log"
dbfilename xdclass.rdb
dir /usr/local/redis/data
#关闭rdb
#save ""
#10秒2个key变动则触发rdb
save 10 2
#100秒5个key变动则触发rdb
save 100 5
#压缩
rdbcompression yes
#检查
rdbchecksum yes
复制代码

备注:Linux内存分配策略,0表示内核将检查是否有足够的内存供应用进程所使用;如果有足够内存则申请允许;否则申请失败,并发错误返回给应用进程

1表示内核允许分配所有的物理内存,而不管当前的内存状态如何

2表示内核允许分配超过所有物理内存和交换总和内存

解决⽅式
echo 1 > /proc/sys/vm/overcommit_memory

持久化配置
vim /etc/sysctl.conf

改为
vm.overcommit_memory=1
修改sysctl.conf后,需要执⾏ sysctl -p 以使⽣效。
复制代码
image

AOF持久化

上面介绍了RDB持久化是全量备份的,但这种备份总是耗时的,有时候我们提供了一种更为高效的方式AOF,工作机制很简单,Redis会将每一个收到的命令都通过write函数追加到文件中。通俗点理解就是像日志记录一样。

配置:

与RDB配置方式不一样

appendonly yes 默认为不开启
AOF文件名通过appendfilename配置设置,默认文件名为appendonly.aof
存储路径同RDB持久化方式一致,使用dir配置
复制代码
bind 0.0.0.0
daemonize yes
requirepass 123456Xdclass
logfile "/usr/local/redis/log/redis.log"
dbfilename xdclass.rdb
dir /usr/local/redis/data
#save 10 2
#save 100 5
save ""
rdbcompression yes
#对rdb数据进⾏校验,耗费CPU资源,默认为yes
rdbchecksum yes
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
复制代码

AOF核心原理

(1)Redis每次写入命令会追加到aof_buf缓冲区中

(2)AOF缓冲区根据对应的策略向硬盘做同步的操作

(3)高频AOF会带来影响,特别是每次刷盘

AOF三种触发机制

(1)每修改同步always:同步持久化 每次发送数据更变会立即被记录到磁盘中,性能较差但是数据保存的完整性比较好

(2)每秒同步everysec:异步操作,每秒记录,如果一秒内宕机的话,会造成数据丢失。

(3)不同no:从不同步

AOF有何优缺点?

优点:

(1)AOF可以更好的对数据保护,不让数据丢失。一般AOF会每隔一秒,通过后台线程执行一次fsync操作,最多丢失一秒钟的数据

(2)AOF日志文件没有任何磁盘寻址的开销,写入性能非常高,文件也不容易损坏。

(3)AOF日志文件的命令拥有很好的可读方式进行记录,因为这个特征非常适合做灾难性的误删除恢复。

缺点:

(1)对于同一份数据来说的话,AOF文件的日志通常要比RDB数据快照文件要更大。

(2)AOF开启后,支持的写QPS会比RDB支持的写QPS低,因为AOF一般配置成每秒fsync一次日志文件。

AOF配置实战

文件重新原理

AOF的方式也同时带来了另一个问题。持久化文件会变得越来越大,为了压缩aof持久化文件。Redis提供了一个barewriteaof命令。来讲内存中的数据以命令的形式保存到临时文件中,同时会开启一条新进程来重写,重写aof文件的操作,并没有读取旧的aof文件,而是把整个内存中的数据库内容用命令的形式重写了一个新的aof文件,这个和快照有点类似。

重写触发配置

手动触发:直接调用bgrewriteaof命令

自动触发:auto-aof-rewrite-min-size和
auto-aof-rewrite-percentage参数(auto-aof-rewrite-min-size表示AOF重写文件最小体积,默认为64MB;auto-aof-rewrite-percentage代表AOF文件空间和上一次重写后AOF文件空间的比值)

常用配置

# 是否开启aof
appendonly yes
# ⽂件名称
appendfilename "appendonly.aof"
# 同步⽅式
appendfsync everysec
# aof重写期间是否同步
no-appendfsync-on-rewrite no
# 重写触发配置
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 加载aof时如果有错如何处理
# yes表示如果aof尾部⽂件出问题,写log记录并继续执⾏。
no表示提示写⼊等待修复后写⼊
aof-load-truncated yes
复制代码

在线上我们到底该怎么做?

(1)RDB持久化与AOF持久化⼀起使⽤

(2)如果Redis中的数据并不是特别敏感或者可以通过其它⽅式重写⽣成数据

(3)集群中可以关闭AOF持久化,靠集群的备份⽅式保证可⽤性

(4)⾃⼰制定策略定期检查Redis的情况,然后可以⼿动触发备份、重写数据;

(5)采⽤集群和主从同步

在Redis4.0后支持混合模式

RDB和AOF可以一起用了,直接将RDB持久化的方式来操作二进制内容覆盖到AOF文件中,因为RDB是二进制,所以很小。有写入的话还是继续append追加到文件的原始命令,等下次文件过大的时候在次rewrite,所以在企业中这种混合模式是比较常见的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容