redis持久化策略(看这篇,你肯定会有所获)

author author     2023-04-07     583

关键词:

参考技术A RDB:Redis DataBase , 记录快照

        RDB是redis 默认的持久化方案. RDB 是当满足一定条件时, 就会将redis内存中的数据写入磁盘,并生成一个快照文件dump.rdb 文件.Redis 重启会通过加载dump.rdb文件恢复数据.

        一定条件分为以下几种情况: 1.自动触发  2. 手动触发 . 下面分开说明下:

a).redis.conf 中 SNAPSHOTTING 其中定义了触发把数据保存到磁盘的触发频率.

        如果不需要rdb 方案, 注释save 或者配置成空字符串" ".

        save 900 1 #900秒内至少有一个key被修改(包括添加)

        save 300 10 #400秒内至少10个key被修改

        save 10000 #60秒内至少有10000个key 被修改.

        这三条配置不冲突, 只要满足一条就触发.

        rdb 文件位置和目录 (默认在安装根目录下) 

        #文件路径

        dir ./

        #文件名称

        dbfilename dump.rdb

        #是否以LZY压缩rdb 文件

        rdbcompression yes 

        #开启数据校验

        rdbchecksum yes

b) shutdown触发 ,保证服务器正常关闭.

c) flushall , rdb文件是空的, 会生成一个空的文件,所以这种情况也没有什么意义.但需要知道,这种情况下

会触发生成rdb文件.

Redis 提供了两条命令: save 和 bgsave

a). save 命令

        save 在生成快照的时候会阻塞当前Redis 服务器,Redis不能处理其他命令.如果内存数据较多,会造成

b).bgsave 命令

        执行bgsave命令时,   Redis会在后台进行异步快照操作,快照同时还可以响应客户端请求.

具体操作

        具体操作:Redis进程会执行fork操作创建子进程(copy-on-write),RDB 持久化过程由子进程负载,完成后自动结束.它不会记录fork之后产生的记录.阻塞只发送在fork阶段,一般时间较短.

一.优势

    1.RDB是一个非常紧凑的文件,它保存了Redis在某个时间点上的数据集.这种文件非常适合进行备份和

灾难恢复.

    2.生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存的工作,主进程不需要进行任何

IO操作.

    3.RDB在恢复大数据集时的速度比AOF的恢复速度要快

二.劣势

    1).RDB 没办法做到实时持久化/妙级持久化.因为bgsave每次运行都要执行fork创建子进程,频繁执行成本过高.    

    2).在一定间隔时间做一次备份,所以如果Redis 以为down掉的话,就会丢失最后一次快照之后所有修改

(数据有丢失)

AOF:<Append Only File> , 记录日志

Redis 默认不开启.AOF采用日志的形式来记录每个写操作,并追加到文件中.开启后,执行更改Redis    命令时,就会把命令写入到AOF文件中.

Redis 重启时会根据日志文件的内容把写指令从前往后执行一次以完成数据的恢复工作.

#开关

appendonly no

#文件名

appendfilename "appendonly.aof"

        由于操作系统缓存机制,AOF数据并没有真正地写入硬盘,而是进入了系统的硬盘缓存.什么时候

把缓冲区的内容写入到AOF文件中? 由下面参数决定

appendfsync :  值: no  \ always \everysec 

        no: 表示不执行fync, 由操作系统保证数据同步到磁盘,速度最快,但是不安全.

        always:表示每次写入都执行fync,以保证数据同步到磁盘,效率很低

        everysec:表示每秒执行以fync ,可能会导致丢失1s数据.通常选择everysec,兼顾效率和安全性.

    因为AOF文件只有一个, 随着redis 不断进行,AOF 的文件会越来越大,文件越大, 文件占用服务器内存

以及AOF恢复要求时间越长.

    为了解决这个问题,可以使用bgwriteaof来重写.那什么时候重写? 又是怎样重写?

    一. 什么时候重写?

    #重写触发机制

    auto-aof-rewrite-percentage 100 默认值是100. 当前aof 文件大小超过 上一次重写的aof文件大小百分之多少进行重写,即当aof文件增长到一定大小时,Redis能够调用bgwriteaof对日志文件进行重写.当前aof文件大小是上次日志重写得到aof文件大小的二倍时, 自动启动新的日志重写过程.

    auto-aof-rewrite-min-size 默认是64M.设置允许重写的最小aof文件大小,避免达到了约定百分比 但尺寸

仍然很小的情况还要重写.

   二. 怎样重写?

    并不是对原文件进行重新整理,而是直接读取服务器上现有的键值对,然后用一条命令去代替之间记录这

个键值对的多条命令,生成一个新的文件后去替换原来的 AOF文件.

    看下面这两个参数:

        no-appendfsync-on-rewrite

        aof-load-truncated

   AOF 数据恢复

        重启Redis之后就会进行AOF文件恢复.

   AOF 的优势和劣势

优点:

1.AOF 持久化的方法提供了多种的同步频率,即使使用默认的同步频率每秒同步一次,Redis最多也就丢失

1秒的数据.

缺点:

1.对于具有相同数据的Redis, AOF文件通常比RDF文件体积更大(RDB存的是数据快照)

2.虽然AOF提供了多种同步的频率,默认的情况下,没秒同步一次的频率也具有较高的性能.在高并发的情况下,RDB比AOF具有更好的性能.

        如果可以忍一小段时间数据的丢失,毫无疑问使用RDB 是最好的,定时生成RDB快照非常便于进行数据备份,而且RDB恢复数据集的速度也要比AOF恢复速度要快.

        否则就要使用AOF重写.但是一般情况下建议不要单独使用某一种持久化机制,而是两种一起用.

本文内容来自咕泡学院-青山老师,感谢青山老师!!

花五分钟看这篇之前,你才发现你不懂restful(代码片段)

原创公众号:bigsai转载请联系bigsai文章收藏在回车课堂和github前言在学习RESTful风格接口之前,即使你不知道它是什么,但你肯定会好奇它能解决什么问题?有什么应用场景?听完下面描述我想你就会明白:在互联网并没有完全... 查看详情

如何保证redis性能与安全?看这篇redis数据库性能测试及安全优化配置指南就够了

本章目录0x00Redis性能指标监控(1)性能指标1.基本活动指标:Basicactivity2.性能指标:Performance3.内存指标:Memory4.持久性指标:Persistence5.错误指标:Error6.其他指标说明(2)性能测试工具1.redi 查看详情

硬核redis总结,看这篇就够了!(代码片段)

高清思维导图已同步Git:https://github.com/SoWhat1412/xmindfile总感觉哪里不对,但是又说不上来会发现底层就是个双端链表,该链表最大长度为2^32-1。常用就这几个组合。lpush+lpop=stack先进后出的栈 lpush+rpop=queue先进先出的队列 l... 查看详情

入门webpack,看这篇就够了

写在前面的话阅读本文之前,先看下面这个webpack的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较有限,你可以快速浏览或直接跳过;如果你和十天前的我一样,对很多选项存在着疑惑,那花一段时间慢慢阅... 查看详情

redis专题-redis的持久化策略

1.持久化机制1.1持久化概述持久化可以理解为存储,就是将数据存储到一个不会丢失的地方,如果把数据放在内存中,电脑关闭或重启数据就会丢失,所以放在内存中的数据不是持久化的,而放在磁盘就算是一种持久化。Redis的... 查看详情

聊聊redis内存淘汰策略(代码片段)

...发于公众号“蘑菇睡不着”前情回顾《源码级别了解Redis持久化》《聊聊Redis过期键删除策略》《Redis数据结构详解》《超详细Redis五种数据结构底层实现》这一期咱们一起来看看Redis的内存淘汰策略~为什么要有内存淘汰机制  大... 查看详情

你真的完全了解java动态代理吗?看这篇就够了

之前讲了《零基础带你看Spring源码——IOC控制反转》,本来打算下一篇讲讲Srping的AOP的,但是其中会涉及到Java的动态代理,所以先单独一篇来了解下Java的动态代理到底是什么,Java是怎么实现它的。动态代理看起来好像是个什么... 查看详情

说说redis持久化方式?分别优缺点是什么?redis更新策略是什么?

...散列、有序集合等。Redis的一个重要特性是它可以将数据持久化到磁盘中,从而保证数据的安全性和可靠性。本文将介绍Redis的两种持久化方式:RDB和AOF,以及它们的优缺点和更新策略。RDB(RedisDatabase)持久化方式是指Redis在一... 查看详情

redis篇:持久化淘汰策略,缓存失效策略

...注公众号,一起交流,微信搜一搜:潜行前行redis持久化redis的数据是保存再系统内存里面的。持久化就是把内存的数据转移到磁盘中,redis的持久化策略有两种:RDB、AOFRDBRDB是以快照的形式把内存里的数据生成一个RDB格... 查看详情

为什么redis集群要使用反向代理?看这篇就明白了

作者:等不到的口琴链接:www.cnblogs.com/Courage129/p/14351545.html如果没有反向代理,一台Redis可能需要跟很多个客户端连接:看着是不是很慌?看没关系,主要是连接需要消耗线程资源,没有代理的话,Redis要将很大一部分的资源用在... 查看详情

redis面试题:持久化文件与淘汰策略

原文地址:Redis面试题(三):持久化文件与淘汰策略原文地址:Redis面试题(三):持久化文件与淘汰策略原文地址:Redis面试题(三):持久化文件与淘汰策略原文地址:Redis面试题(三):持久化文件与淘汰策略欢迎关注我的公众号【... 查看详情

handler原理剖析,看这篇就够了

Handler原理剖析,看这篇就够了本篇文章将会对Handler进行深层次的剖析,结合关系剖析图、代码走向剖析图以及10个常见问题,希望看完文章的同学都能有所收获,加深对Handler的了解!一、Handler运行原理剖析1.... 查看详情

redis中持久化策略rdb和aof的区别

...的线程,会先将内存中的数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次已经持久化好了的文件,整个过程中,主进程是不进行任何IO操作的,确保了极高的性能此时的主进程还可以进行读写操... 查看详情

handler原理剖析,看这篇就够了

Handler原理剖析,看这篇就够了本篇文章将会对Handler进行深层次的剖析,结合关系剖析图、代码走向剖析图以及10个常见问题,希望看完文章的同学都能有所收获,加深对Handler的了解!一、Handler运行原理剖析1.... 查看详情

redis持久化的策略

...种高级的key-value数据库,它跟memcached类似,不过数据可以持久化,而且支持的数据类型也很丰富。Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sortedset:有序集合)。支持在服务器端计... 查看详情

redis持久化策略剖析(代码片段)

文章目录持久化策略1、RDB持久化2、AOF持久化3、RDB-AOF混合持久化持久化策略Redis提供了RDB持久化、AOF持久化、RDB-AOF混合持久化三种持久化策略。1、RDB持久化RDB持久化是Redis默认持久化方式,可以通过SAVE或BGSAVE命令触发,... 查看详情

超简单!redis中的持久化策略汇总

查看详情

pdf转word技巧,看这篇足够

我们在日常工作中,会接触到很多文件,而各种文件之间格式相互转换就是家常便饭,也是最让人头疼的问题,那么遇到PDF文件要转换成Word该怎么办呢?PDF转Word技巧有哪些?下面就来给大家整理一些,让你轻松应对,不在犯愁... 查看详情