0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Redis持久化分为两种:RDB和AOF

阿铭linux 来源:阿铭linux 2023-02-21 09:22 次阅读

前言

Redis持久化,一个老掉牙的问题,但是面试官就是喜欢问。这也是我们学Redis必会的一个知识点。Redis作为内存数据库,它工作时,数据都保存在内存里,这也是它为什么很快的一个原因。但存到内存里肯定是有丢数据的风险,所以Redis是有设计持久化的。Redis持久化分为两种:RDB和AOF。

RDB持久化

RDB(Redis DataBase),是redis默认的存储方式,RDB持久化其实就是将内存的数据直接做了一份快照到磁盘上。触发RDB持久化的方式有:

符合配置的快照保存规则(配置文件里save开头的配置);

执行save或者bgsave命令;

执行flushall命令;

执行主从复制操作 (第一次)。

配置文件redis.conf中,save开头的配置为RDB持久化相关配置。具体解释如下:

save "" 表示关闭rdb持久化;

save 3600 1 表示每1小时至少有1个key改变,就触发一次持久化可以写多个条件;

save 3600 1 300 100 60 10000 这里定义了三个策略,它们相互之间为或的关系。

AOF持久化

AOF(AppendOnly File)持久化,是其将Reids执行过的所有写指令记录下来,保存到日志里,类似MySQL的bin-log。默认配置文件里该持久化方式是关闭的,需要将配置修改为:

appendonly yes
由于AOF是将Redis服务的写操作日志写到日志文件里,当写操作非常频繁时,那么它对磁盘也会造成很大的压力。所以,AOF的磁盘数据落地(fsync函数)也有三个策略: Always:表示只要有写入就会调用fsync函数; Everysec:表示每秒调用fsync函数一次; No:表示不调用fscyn函数,完全跟着系统走;

16191ff2-b173-11ed-bfe3-dac502259ad0.png

建议选择everysec,比较保守一些。

AOF重写

AOF文件如果不做干预,它会一直增涨,直到将你的磁盘写满。好在Redis给AOF提供了重写机制。我们可以直接执行如下命令,进行AOF重写:

bgrewriteaof;
执行完该命令后,AOF文件会根据已经持久化的RDB文件和现有AOF文件重新整理,它会把无用的写日志清空,最终达到瘦身目的。 当然,AOF还有一个重写的配置,两个参数

参数 说明
auto-aof-rewrite-min-size AOF文件必须要不低于这个尺寸时才会触发重写,后面的每次重写就不会根据这个变量了(根据上一次重写完成之后的大小)。此变量仅初始化启动redis有效
auto-aof-rewrite-percentage 如果该数值定义为80,则表示当AOF文件增长的尺寸超过上次大小(AOF文件上次重写后的大小会被记录下来)百分80时就会触发重写操作

RDB和AOF如何选

在实际生产环境中,根据数据量、应用对数据的安全要求、预算限制等不同情况,会有各种各样的持久化策略。 如,完全不使用任何持久化、使用RDB持久化或AOF持久化的一种,或同时开启快照持久化和AOF持久化等。此外,持久化的选择必须与Redis的主从策略一起考虑,因为主从复制与持久化同样具有数据备份的功能,而且主机Master和从机Slave可以独立的选择持久化方案。

如果Redis中的数据完全丢弃也没有关系(如Redis完全用作DB层数据的cache),那么无论是单机,还是主从架构,都可以不进行任何持久化。 在单机环境下(对于个人开发者,这种情况可能比较常见),如果可以接受十几分钟或更多的数据丢失,选择RDB持久化对Redis的性能更加有利,如果只能接受秒级别的数据丢失,应该选择AOF。

但在多数情况下,我们都会配置主从环境,Slave的存在既可以实现数据的热备,也可以进行读写分离分担Redis读请求,以及在Master宕掉后继续提供服务。在这种情况下,一种可行的做法是:

Master:完全关闭持久化,这样可以让Master的性能达到最好;

Slave:关闭RDB持久化,开启AOF(如果对数据安全要求不高,开启RDB持久化关闭AOF也可以),并定时对持久化文件进行备份(如备份到其他文件夹,并标记好备份的时间)。然后关闭AOF的自动重写,然后添加定时任务,在每天Redis闲时(如凌晨12点)调用bgrewriteaof。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3591

    浏览量

    63369
  • MySQL
    +关注

    关注

    1

    文章

    775

    浏览量

    26004
  • MYSQL数据库
    +关注

    关注

    0

    文章

    95

    浏览量

    9277
  • Redis
    +关注

    关注

    0

    文章

    362

    浏览量

    10492

原文标题:一文搞懂Redis持久化

文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    阿里云基于NVM的持久化高性能Redis数据库

    各自业务需求,在读写性能、缓存容量、数据可靠性等方面作出灵活的选择。Redis提供了RDBAOF两种持久化方式供选择,4.0中更是引入了
    发表于 08-13 15:06 194次阅读

    如何开启RDB持久化方式

      RDB快照(Redis DataBase) RDB是一种快照存储持久化方式,具体就是将Redis某一时刻的内存数据保存到硬盘的文件当中,
    的头像 发表于 06-25 11:52 555次阅读
    如何开启<b class='flag-5'>RDB</b><b class='flag-5'>持久</b>化方式

    Redis是什么?简述它的优缺点?

    次/s,写的速度是81000次/s。 支持数据持久化,支持AOFRDB两种持久化方式。 支持事务, R
    的头像 发表于 10-09 10:37 407次阅读

    Redis持久化机制介绍

    Redis持久化机制? 为了能够重用Redis数据,或者防止系统故障,我们需要将Redis中的数据写入到磁盘空间中,即持久化。
    的头像 发表于 10-09 11:44 307次阅读
    <b class='flag-5'>Redis</b><b class='flag-5'>持久</b>化机制介绍

    Redis持久RDB方式介绍

    Redis持久Redis是一个内存数据库,为了保证数据的持久性,它提供了两种持久化方案:
    的头像 发表于 10-09 14:56 260次阅读
    <b class='flag-5'>Redis</b><b class='flag-5'>持久</b>化<b class='flag-5'>RDB</b>方式介绍

    Redis持久AOF原理学习

    AOF文件中存储的就是序列化后的reids命令。 AOF同步和RDB类似之处在于都是采用fork进程来处理: 通过这张图,我们知道了Redis是将客户端传入的命令直接写入
    的头像 发表于 10-09 15:02 190次阅读
    <b class='flag-5'>Redis</b><b class='flag-5'>持久</b>化<b class='flag-5'>AOF</b>原理学习

    redis持久化方式有几种及配置

    Redis是一种内存数据库,为了避免数据丢失,需要将数据持久化到磁盘上。Redis提供了两种持久化方式:
    的头像 发表于 12-04 11:09 328次阅读

    redis两种持久化方式的区别

    的完整性和一致性。 Redis提供了两种持久化方式:RDBRedis Database)和AOF
    的头像 发表于 12-04 11:12 250次阅读

    redis持久化方式RDBAOF的区别

    Redis 是一个高性能的键值对数据库,提供了两种持久化方式:RDBAOFRDB 是将
    的头像 发表于 12-04 16:25 294次阅读

    redis持久化机制和如何实现持久

    Redis是一款高性能的非关系型数据库,其持久化机制是保证数据在重启后仍能够保存的关键。Redis提供了两种方式来实现持久化:
    的头像 发表于 12-05 10:02 256次阅读

    redis持久化机制优缺点

    持久化机制:RDBRedis Database)和AOF(Append Only File)。 RDB
    的头像 发表于 12-05 10:03 262次阅读

    redis里数据什么时候持久

    Redis是一种开源的高性能、非关系型内存数据库,它使用了键值对存储数据,并且支持多种数据结构。 Redis提供了持久化机制,以确保在服务器重启后数据不会丢失。Redis
    的头像 发表于 12-05 10:05 232次阅读

    云容器redis持久化配置

    丢失。 Redis提供了不同的持久化机制,可以根据需要进行配置。本文将详细介绍云容器中Redis持久化配置及其相关配置项。 一、Redis
    的头像 发表于 12-05 10:07 251次阅读

    redis数据会自动清除吗

    将数据以二进制格式快照的形式保存到磁盘上,以便在重启时恢复数据。这个功能可以通过配置文件或者命令来启用,并可以设置自动触发或定时触发。但需要注意的是,RDB持久化是异步的,所以在Redis意外终止时可能会丢失最近修改的数据。
    的头像 发表于 12-05 10:13 976次阅读

    redis持久rdbaof一起用好处

    Redis是一个流行的内存数据库,它通过使用不同的持久化机制来确保数据的持久性。RDBAOFRedi
    的头像 发表于 12-05 10:17 320次阅读