一文吃透redis持久化,妈妈再也不担心我面试过不了!
持久化介绍
redis 提供了两种方式方式进行数据的持久化(将数据存储到硬盘中);第一种称为快照(snapshotting)RDB,它将某一时刻的所有数据都写入硬盘,所以快照是一次全量备份,并且存储的数据形式是二进制序列化形式;另一种方式是只追加文件(append-only file)AOF, 它会在执行命令时将命令复制一份到硬盘中,AOF在长期运行中会变的非常庞大,数据库重启加载AOF日志将会很慢;
redis 将数据持久化的主要原因就是重用数据,或者防止系统故障,备份数据;
两种方式的持久化是可以同时存在的,但是当Redis重启时,AOF文件会被优先用于重建数据
工作原理
快照工作原理
redis的快照必须要求文件IO操作,单线程的redis进行多余的IO操作会影响服务器的性能,所以redis采用COW(copy on write)机制实现快照的持久化;
- 首先redis进行会fork一个子进程,此时就存在父子进程;
- 父进程负责进行修改操作,内存持续增加;而子进程数据不做任何变化;
- 子进程将瞬间数据写入磁盘的rdb文件
AOF工作原理
AOF日志存放了redis指令顺序序列;所以只要重新执行AOF文件包含所有的命令就可以实现AOF文件记录的所有数据;
常用配置
RDB配置
默认文件
dbfilename dump.rdb
dir ./
redis会将数据默认dump至dump.rdb文件中;我们可以通过配置修改dump的频率;
#在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。
save 900 1
#在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。
save 300 10
#在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照
save 60 10000
如果想要禁用快照功能,注释掉如上配置,开启save "" 配置
save ""
#save 900 1
#save 300 10
#save 60 10000
手动备份
save命令是阻塞命令 ,当服务器接收到save命令之后就会开始拍摄快照,在此期间不会处理其他请求;
bgsave命令也是立即拍摄快照,非阻塞命令,而是fork一个子线程进行备份快照;
缺点
- 每隔一段时间进行一次持久化,如果redis崩溃,可能会导致部分数据丢失问题;
- RDB使用fork()子进程进行数据的持久化,如果数据量大,可能花费的时间较长,redis会造成明显的卡顿几秒现象;
- 很好的备份效果,容易进行数据恢复;
优点
- 相比AOF,在数据量比较大的情况下,RDB的启动速度更快;
- RDB使用fork()子进程进行数据的持久化,本身不会有多余的IO操作;
AOF配置
启用AOF
appendonly yes
默认文件
appendfilename "appendonly.aof"
dir ./
fsync
如果redis发生宕机事件,有可能没来的及数据写入磁盘;此时redis AOF 的 fsync 策略能够保证redis保持高性能,和尽可能的减少数据丢失;默认就是使用 1s执行一次同步;
#每次有数据修改发生时都会写入AOF文件。
#appendfsync always
#每秒钟同步一次,该策略为AOF的缺省策略。
appendfsync everysec
#从不同步。高效但是数据不会被持久化。
#appendfsync no
AOF重写
AOF日志文件会随着redis运行越来越庞大,Redis 提供了 bgrewriteaof 指令用于对 AOF 日志进行瘦身;也可以使用配置文件进行自动瘦身;
# 当前AOF文件大小是上次日志重写得到AOF文件大小的二倍时,自动启动新的日志重写过程。
auto-aof-rewrite-percentage 100
# 当前AOF文件启动新的日志重写过程的最小值,避免刚刚启动Reids时由于文件尺寸较小导致频繁的重写。
auto-aof-rewrite-min-size 64mb
要禁用自动的日志重写功能,我们可以把百分比设置为0
auto-aof-rewrite-percentage 0
优点
- 使用fsync每秒一次同步,数据完整性较高;
- redis如果发生宕机,支持使用redis-check-aof 工具修复损坏的AOF文件
缺点
- AOF文件的大小一般会比RDB文件大
- AOF在运行效率上往往会慢于RDB
关注公众号:知识追寻者,获取一线大厂面经

一文吃透redis持久化,妈妈再也不担心我面试过不了!的更多相关文章
- 妈妈再也不担心我面试被Redis问得脸都绿了
		长文前排提醒,收藏向前排提醒,素质三连 (转发 + 在看 + 留言) 前排提醒! 前言 Redis 作为一个开源的,高级的键值存储和一个适用的解决方案,已经越来越在构建 「高性能」.「可扩展」 的 W ... 
- 妈妈再也不用担心别人问我是否真正用过redis了
		1. Memcache与Redis的区别 1.1. 存储方式不同 1.2. 数据支持类型 1.3. 使用底层模型不同 2. Redis支持的数据类型 3. Redis的回收策略 4. Redis小命令 ... 
- 多维度对比5款主流分布式MQ消息队列,妈妈再也不担心我的技术选型了
		1.引言 对于即时通讯网来说,所有的技术文章和资料都在围绕即时通讯这个技术方向进行整理和分享,这一次也不例外.对于即时通讯系统(包括IM.消息推送系统等)来说,MQ消息中件间是非常常见的基础软件,但市 ... 
- 有了 tldr,妈妈再也不用担心我记不住命令了
		引言 有一次我在培训时说「程序员要善于使用 Terminal 以提高开发效率」,一位程序员反驳道:「这是 21 世纪,我们为什么要用落后的命令行,而不是先进的 GUI?」 是的,在一些人眼里,这个黑黑 ... 
- 妈妈再也不用担心我使用git了
		妈妈再也不用担心我使用git了 Dec 29, 2014 git git由于其灵活,速度快,离线工作等特点而倍受青睐,下面一步步来总结下git的基本命令和常用操作. 安装msysgit 下载地址:ms ... 
- 利用CH341A编程器刷新BIOS,恢复BIOS,妈妈再也不用担心BIOS刷坏了
		前几天,修电脑主析就捣鼓刷BIOS,结果刷完黑屏开不了机,立刻意识到完了,BIOS刷错了.就从网上查资料,各种方法试了个遍,什么用处都没有.终于功夫不负有心人,找到了编码器,知道了怎么用.下面看看具体 ... 
- python爬虫07 | 有了 BeautifulSoup ,妈妈再也不用担心我的正则表达式了
		我们上次做了 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍 有些朋友觉得 利用正则表达式去提取信息 太特么麻烦了 有没有什么别的方式 更方便过滤我们想要的内容啊 emmmm 你还别说 还 ... 
- [翻译自官方]什么是RDB和AOF? 一文了解Redis持久化!
		概述 本文提供Redis持久化技术说明, 建议所有Redis用户阅读. 如果您想更深入了解Redis持久性原理机制和底层持久性保证, 请参考文章 揭秘Redis持久化: http://antire ... 
- 锋利的js之妈妈再也不用担心我找错钱了
		用js实现收银功能. <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <hea ... 
随机推荐
- 浅谈js数组中的length属性
			前言 一位正在学习前端的菜鸟,虽菜,但还未放弃. 内容 首先,我们都知道每个数组都有一个length属性 这个length属性一般我们用来循环遍历的约束,一般我们都会把他认为是该数组里面有几个元素这个 ... 
- 【AHOI2009】中国象棋 题解(线性DP+数学)
			前言:这题主要是要会设状态,状态找对了问题迎刃而解. --------------------------- 题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可 ... 
- JavaScript小游戏实例:统一着色
			设计如下的简单小游戏. 在面板(画布)中放置10行10列共100个小方块,每个小方块随机在5种颜色中选一种颜色进行着色,在面板的下方,放置对应的5种颜色色块,如图1所示. 图1 “统一着色”游戏界面 ... 
- Docker 阿里镜像
			Docker 配置阿里镜像 Dokcer 拉取镜像非常慢,配置阿里镜像加速. 步骤 首先注册阿里云,找到 "容器镜像服务" --> "镜像加速器" ,复制 ... 
- HttpClient 模拟用户操作
			首先模拟用户登录: /** * 模拟用户登录 * */ private void login() throws HttpException, IOException { PostMethod logi ... 
- Quartz.Net的基础使用方法,单任务执行
			1.先创建一个控制台应用程序 2.应用Quartz的NuGet包 3.编写执行任务代码 using System; using System.Threading.Tasks; using Quar ... 
- Vue 大量data及rules的data选项结构组织
			如果Vue文件需要很多的data成员及表单验证,建议使用类似结构 export default{ data(){ const model = { username: 'suzhen', passwor ... 
- Probabilistic PCA、Kernel PCA以及t-SNE
			Probabilistic PCA 在之前的文章PCA与LDA介绍中介绍了PCA的基本原理,这一部分主要在此基础上进行扩展,在PCA中引入概率的元素,具体思路是对每个数据$\vec{x}_i$,假设$ ... 
- chaos;head移植版缺失python27.dll  SDL2.dll问题解决
			注意 不要在目录名中有字符' ; ' 
- 基于pcntl的PHP进程池
			想必大家都知道可以通过多进程或者多线程的方式实现异步. PHP多进程编程当前主要有这几种方式, 1>基于pcntl实现多进程,这也是PHP自带的多进程玩法 2>Swoole自己修改PHP内 ... 
