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

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

👨‍💻 博客主页:作者主页
👍 觉得文章不错的朋友可以点点赞和关注
🎁 粉丝福利:学习资料、简历模板统统都有点击领取

本文是对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 以使⽣效。

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,所以在企业中这种混合模式是比较常见的。

Redis数据持久化,与redis配置 **RDB(Redis DataBase)**: 这是 Redis 的一个持久化机制,它会定期将内存中的数据集快照(snapshot)保存到磁盘上。- **快照文件(Snapshot)**: 如果启用了 RDB 持久化,你会在 Redis 目录中找到名为 `dump.rdb` 的文件。- **集群模式**: 如果你使用的是 Redis 集群,情况可能会有所不同。- **AOF 文件**: 如果启用了 AOF 持久化,你会在 Redis 目录中找到名为 `appendonly.aof` 的文件。 阅读详情

相关推荐

Redis 6.0 安装 + 持久化配置

#类型 c语言包: yum install -y gcc 内存数据库:读写快,持久化可写入硬盘 单线程,弱于多线程的 memcache,忽略这一特性 #集合的使用场景 更具文章tag来检索文章 #版本号 小数点后的第一个数字:偶数为稳定版,奇数为非稳定版 稳定版:2.4、2.6 非稳定版:2.5、2.7 #安装redis-6.0.6:step 1 cd /usr/local/src/ wget http://download.redis.io/releases...

wenhuangwei的博客 581

Redis6持久化操作

redis是一个内存数据库,一旦断电或服务器进程退出,内存数据库中的数据将全部丢失,所以需要redis持久化;redis持久化就是把数据保存在磁盘上,利用永久性存储介质将数据保存,在特定的时间将保存的数据进行恢复的工作机制;redis提供三种持久化机制:RDB:存储数据结果,关注点在数据AOF:存储操作过程,关注点在数据的操作过程混合持久化Redis4.0中新增方式,集成了rdb和aof中的优点。

Java小菜鸟 440

Redis持久化机制

Redis持久化是一种重要的机制,用于将内存中的数据保存到磁盘上,以防止数据在服务器宕机或重启时丢失。Redis提供了两种主要的持久化方法:RDB(Redis DataBase)和AOF(Append Only File)。下面我将详细介绍这两种方法。RDB持久化会在指定的时间间隔内创建数据集的快照,并将其保存为一个单一的压缩文件。这个过程可以通过配置文件中的save指令来自动触发,也可以通过执行SAVE或BGSAVE命令来手动触发。

广阔天地,大有作为 1054

6 redis持久化

redis持久化特征: redis作为一个内存数据库来说,业务在运行的时候,数据都是存放在内存中的,但是为了数据的安全性以及系统的高可用,需要对数据进行持久化操作。 那么redis宕机后,数据是否会丢失? 不会,redis支持持久化操作。 理由: RDB方案: 二进制文件方式,不是实时存储的方式. 文件体积小。 Aof方案: 实时存储,以日志的方式存储,所以文件体积大。个人目前理解的方式类似于oracle的redo log方式 在redis里面,默认是开启持久化操作的。存储的文件是dump...

weixin_39563769的博客 252

6.redis持久化

rdb 文件后缀 .rdb 持久化方式 手动 自动 文件结构 aof 文件后缀 .aof 持久化方式 手动自动

qq_28613081的博客 220

Redis持久化详解

Redis持久化Redis是一个基于内存的数据库,它的数据是存放在内存中,内存有个问题就是关闭服务或者断电会丢失。Redis的数据也支持写到硬盘中,这个过程就叫做持久化。RDB(Redis DataBase):简而言之,就是在指定的时间间隔内,定时的将 redis 存储的数据生成Snapshot快照并存储到磁盘等介质上;AOF(Append Of File):将 redis 执行过的所有写指令记录下来,在下次 redis 重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。

怪咖@的博客 3万+

Redis6之(六)Redis持久化

Redis持久化

qq_50994235的博客 1531

你不知道redis三-Redis持久化机制

一、持久化 我们前两章已经讲了,redis是内存型的数据库,他之所以快是因为数据存储在内存。那么数据存储在内存会有什么问题呢?当然就是当服务重启或者服务器宕机内存数据就被清除,我们就无法访问之前存储的数据了。那么怎么解决这个问题呢?当然就是使用持久化技术 持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化是将程序数据在持久状态和瞬时状态间转换的机制。比如JDBC就是一种持久化机制。文件IO也是一种持久化机制。 redis也是一个支持持久化的内存数

b379685397的博客 4万+

深入探讨 Redis 持久化机制:原理、配置与优化策略

持久化是指将Redis中的数据从内存存储转移到磁盘上的过程。由于Redis是一个内存数据库,所有的数据默认存储在内存中,若发生系统崩溃或重启,内存中的数据将会丢失。因此,持久化机制可以确保Redis中的数据在出现故障后能够恢复。数据恢复:通过持久化机制,Redis能够在重启后恢复数据,避免因宕机或故障导致的数据丢失。数据备份:持久化文件可作为数据的备份,方便灾难恢复。持久存储:对一些需要长期存储的数据,可以通过持久化方式将数据从内存中转移到磁盘中,节省内存资源,同时保证数据不丢失。

无敌岩雀的博客 3265

[Redis] Redis数据持久化

我们之前在学习MySQL数据库的时候,我们学习过MySQL事务的四个比较核心的特性:分别是原子性(把对多个表的操作打包为一个操作),一致性(事务前后的数据都是合法数据,比如同一个操作中同时减少和增加一个值,要不同时成功,要不同时失败,不能出现中间状态),持久性(把数据存储在硬盘上),隔离性(脏读,不可重复读,幻读,串行化).

无需多言 2664

Redis --- Redis如何做持久化

Redis如何做持久化 一共三种 一、RDB(快照)持久化:保存某个时间点的全量数据快照 redis.conf save 60 1 代表Redis60秒内写入一条数据那么进行快照 stop-writes-on-basave-error yes 代表当备份进程出错的时候,主进程就停止写入新的操作了。这样是为了保护持久化数据一致性的问题。 rdbcompression yes 表示...

xinbumi的博客 2万+

redis混合持久化配置

redis4.0之后,持久化方式多了一种,叫混合持久化,我在安装配置过程中费了一些周折,以为没有配置成功,后来看了一些持久化的原理才弄明白,记录如下: 一、参考 1、redis源码分析(6)——aof rewrite https://blog.csdn.net/chosen0ne/article/details/44461497 2、REDIS AOF的实现https://blog.csdn...

huachangzai的博客 4487

redisredis持久化

两种持久化方式(1)RDB(Redis DataBase):内存中数据直接写入文件中(2)AOF(Append Of File):以追加的行为把内容写入文件中。

rita_0567的博客 1612

天天用Redis持久化方案你又知道哪些?

前言 文章首发于微信公众号【码猿技术专栏】:天天用Redis持久化方案有哪些你知道吗? Redis目前已经成为主流的内存数据库了,但是大部分人仅仅是停留在会用的阶段,你真的了解Redis内部的工作原理吗? 今天这篇文章将为大家介绍Redis持久化的两种方案,文章将会从以下五个方面介绍: 什么是RDB,RDB如何实现持久化? 什么是AOF,AOF如何实...

码猿技术专栏 2584

Redis持久化机制(必须知道

Redis提供了RDB和AOF两种持久化机制。RDB通过定时快照保存数据,恢复快但可能丢失数据;AOF记录所有写命令,安全性高但文件较大。最佳实践是4.0+版本的混合持久化(RDB-AOF),结合了两者优点:快速恢复和数据安全。生产环境建议根据业务需求选择,核心数据推荐混合持久化+定时备份,同时监控fork耗时以确保稳定性。

GQ_666的博客 993

详解Redis如何持久化

本文介绍了 Redis 的两种持久化方式:RDB 和 AOF。RDB 按时间间隔快照存储,AOF 记录写操作。阐述了它们的配置、工作原理、恢复数据的方法、性能与实践建议,如降低 fork 频率、控制内存等,还提到二者可配合使用,最后提及后续将介绍主从复制与集群知识。

sosovo66的博客 1539

redis进阶入门配置持久化

RDB 持久化方式能够在指定的时间间隔内对你的数据进行快照存储AOF 持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以Redis 协议追加保存每次写的操作到文件末尾,Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。只做缓存,如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化

qq_62377885的博客 1932

Redis ACL 用户配置基础及持久化方案

Redis ACL(Access Control List,访问控制列表)是Redis 6.0及以上版本引入的核心功能,用于精细化管理用户权限。通过ACL,可实现“用户-权限”的绑定,精确控制哪些用户能访问Redis、能操作哪些键(key)以及能执行哪些命令(command),相比传统的单密码认证,提供了更灵活、更安全的访问控制能力。

qq_60309351的博客 931
上一篇: 使用异步编程保证Koa的洋葱模型
下一篇: 由浅到深让你明白MySQL的事务
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值