1、为什么redis要实现持久化?

避免因宕机、断电等场景导致进程退出后数据丢失,如果redis的数据都只存放于内存,那么进程退出后数据就丢失了。持久化机制可以持久化内存数据到硬盘,重启redis后基于持久化数据进行恢复。

2、redis持久化的方式有哪些

2.1 RDB,定时对进程数据拍摄快照存储到硬盘的持久化方式

2.1.1如何触发RDB持久化?

2.1.1.1手动触发

1.【不推荐】Redis Save 命令执行一个同步保存操作,将当前 Redis 实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘。$\color{red}{此命令会阻塞当前Redis服务器,直到RDB过程完成为止,对于内存比较大的实例会造成长时间阻塞,线上环境不建议使用。}$
命令如下

redis 127.0.0.1:6379> SAVE
OK

2.【推荐】为了解决SAVE命令对redis实例的阻塞问题,redis提供另一个命令:BGSAVE。
Redis BGSAVE 命令用于在后台异步保存当前数据库的数据到磁盘。

$\color{red}{BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。}$
命令如下:

redis> BGSAVE
Background saving started

显然BGSAVE 命令是针对SAVE阻塞问题做的优化。因此Redis内部所有的涉
及RDB的操作都采用BGSAVE 的方式,而SAVE命令已经废弃。

2.1.1.2 自动触发

REDIS在以下场景会自动触发RDB落盘:

  • 使用save相关配置,如“save m n”。表示m秒内数据集存在n次修改
    时,自动触发bgsave。
  • 如果从节点执行全量复制操作,主节点自动执行bgsave生成RDB文件并发送给从节点,更多细节见6.3节介绍的复制原理。
  • 执行debug reload命令重新加载Redis时,也会自动触发save操作。
  • 默认情况下执行shutdown命令时,如果没有开启AOF持久化功能则
    自动执行bgsave。

2.1.2 BGSAVE处理流程


1.执行bgsave命令,Redis父进程判断当前是否存在正在执行的子进
程,如RDB/AOF子进程,如果存在bgsave命令直接返回。

2.父进程执行fork操作创建子进程,fork操作过程中父进程会阻塞,通
过info stats命令查看latest_fork_usec选项,可以获取最近一个fork操作的耗
时,单位为微秒。

3.父进程fork完成后,bgsave命令返回“Background saving started”信息
并不再阻塞父进程,可以继续响应其他命令。

4.子进程创建RDB文件,根据父进程内存生成临时快照文件,完成后
对原有文件进行原子替换。执行lastsave命令可以获取最后一次生成RDB的
时间,对应info统计的rdb_last_save_time选项。

5.进程发送信号给父进程表示完成,父进程更新统计信息,具体见
info Persistence下的rdb_*相关选项。

2.1.3 RDB日志文件在哪?

保存在dir参数指定的目录下。
改变RDB日志文件存储目录命令:

config set dir {newDir}

改变RDB日志文件名命令:

config set dbfilename {newFileName}

$\color{red}{当遇到坏盘或磁盘写满等情况时,可以通过config set dir{newDir}在线
修改文件路径到可用的磁盘路径,之后执行bgsave进行磁盘切换,同样适用
于AOF持久化文件}$
$\color{red}{Redis默认采用LZF算法对生成的RDB文件做压缩处理,压缩后的
文件远远小于内存大小,默认开启,可以通过参数config set rdbcompression{yes|no}动态修改。}$
$\color{red}{虽然压缩RDB会消耗CPU,但可大幅降低文件的体积,方便保存到硬盘
或通过网络发送给从节点,因此线上建议开启。}$

2.2 AOF,基于日志文件记录写命令日志的高实时性持久化方式

3.两种持久化方式的优劣对比

转载于:https://www.cnblogs.com/powerjiajun/p/11569460.html

redis的持久化(RDB与AOF)未完待续相关推荐

  1. Redis解读持久化RDB和AOF原理

    我们知道关系型数据库比如MySQL支持全备.差备.增备.为了保证Redis故障重启后仍然可用我们的Redis支持全备(RDB快照备份)和增备(AOF日志连续增量备份),下面我们就来解读Redis持久化 ...

  2. Redis持久化 RDB和AOF 比较与选择

    Redis持久化方案 Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘.当下次Redis重启时,利 ...

  3. 【Linux服务器开发系列】一场redis线上事故引发的思考丨redis持久化 rdb和aof丨redis主从复制

    一场redis线上事故引发的思考 1. 事故背景介绍 2. redis持久化 rdb和aof 3. redis主从复制 4. 解决方案详解 [Linux服务器开发系列]一场redis线上事故引发的思考 ...

  4. (未完待续)浅谈微服务以及 常用中间件( zookeeper redis rabbitmq)

    传统的单体框架,已经不满足目前公司战略规划要求,近几年"微服务" 这个字眼,出现的越来越频繁,虽然有过一年多微服务项目经验,也很难把微服务解释清楚,到底何为微服务? Martin ...

  5. pythonb超分辨成像_Papers | 超分辨 + 深度学习(未完待续)

    1. SRCNN 1.1. Contribution end-to-end深度学习应用在超分辨领域的开山之作(非 end-to-end 见 Story.3 ). 指出了超分辨方向上传统方法( spar ...

  6. 《图解 HTTP》读书笔记(未完待续)

    ARP 协议(Address Resolution Protocol)一种以解析地址的协议,根据通信双方的 IP 地址就可以查出对应的 MAC 地址. MAC( Media Access Contro ...

  7. 使用 Sharding-Jdbc 实现分库分表、读写分离(未完待续)

    先贴代码, 回头讲解.未完待续 规划 实现分库分表.读写分离. 准备两张表:svc_order, svc_order_item 结构如下,可以想象成是未实施分库分表之前的数据库结构: CREATE D ...

  8. 《今日简史》读书笔记(未完待续)

    <今日简史>读书笔记(未完待续) 这本书是尤瓦尔·赫拉利的简史三部曲的最后一本,前2本书是<未来简史>和<人类简史>.根据豆瓣上网友的评价,这本书是尤瓦尔·赫拉利写 ...

  9. linux引数列项目过长,Linux 命令个人总结====== 未完待续 个人认为比较重要

    Linux 命令个人总结====== 未完待续 man [功能说明]: 查看帮助 [语法格式]: man [123456789]命令.文件. [选项参数]: 数字"1"表示用户命令 ...

  10. CC2530学习路线-基础实验-串口通讯发送字符串(4 未完待续)

    目录 1. 前期预备知识 1.1 串口通讯电路图 1.2 实验相关寄存器 1.2 常用波特率设置 本章未完待续..... 原来写的文章已经丢失了,只能找到这一小部分,看什么时候有时间再补上. 1. 前 ...

最新文章

  1. 数字电路时钟问题——Jitter与Skew区别
  2. python画三维温度散点图-matplotlib在python上绘制3D散点图实例详解
  3. 普通程序员,几个月如何成功转型AI?
  4. poi写入Excel
  5. ACM 整数划分(四)
  6. SAP License:ERP之路
  7. 87.http upstream模块提供的变量
  8. 笑死人不偿命,你敢进来看看吗
  9. 威纶通触摸屏可以解密吗_老电工选型威纶通触摸屏时的3大技巧!知道了能帮你省事不少...
  10. 例说需求跟踪矩阵的作用
  11. 说出我的故事,献给正在迷茫的你
  12. 算数,关系,逻辑运算
  13. 外卖返利小程序饿了么美团对接公众号返利系统分销系统源码
  14. 电信飞扬校园网共享WIFI(MAC用户)
  15. 游园惊梦之“想做学者么?”有感
  16. 安卓手机与Linux同步后,搜索文件内的内容
  17. [点点搬家]与Perl厮混后感觉嘚儿嘚儿的
  18. Kaggle注册以及问题解决
  19. solidity 基础讲解
  20. STL源码剖析之配接器

热门文章

  1. 计算机wps如何排序,wps怎么排序【解答方案】
  2. DE33 Relation Between Non-linear Systems and First-order ODEs
  3. 图像处理几种Trick
  4. 金融数据分析之pdfplumber提取年报PDF关键数据(其他PDF数据通用)
  5. 医疗中文问句意图匹配Top3方案ppt
  6. 基于CNN目标检测方法(RCNN,Fast-RCNN,Faster-RCNN,Mask-RCNN,YOLO,SSD)行人检测
  7. c语言printf打印字符串,puts()vs printf()用于以C语言打印字符串
  8. android 柱状图_安卓控件 仪表盘控件 柱状图控件 曲线控件 xamarin.android 分类器 瓶子控件 报警控件 水箱控件 进度条控件等...
  9. 不能编辑access_vcf通讯录编辑器 v3.1.6 vcf通讯录编辑器软件
  10. 安装pattern出错mysql_config not found