一文了解:Redis的RDB持久化

Redis是内存数据库,为了保证数据不在故障后丢失,Redis需要将数据持久化到硬盘上。

Redis持久化有两种方式:一种是快照,全量备份。一种是AOF方式,连续增量方式。

RDB

RDB持久化就是把数据生成快照保存到硬盘的过程。每N分钟数据发送了M次写操作之后,从内存dump数据形成rdb文件,压缩后放在备份目录

工作原理

Redis-Server主进程会Fork一个子进程在后台生成RDB文件,主进程可以在不阻塞线程情况下接收其他命令。在主进程Fork过程中会产生阻塞,Fork完成后不在阻塞主进程,持久化工作交给子进程,子进程会生成一个临时的快照文件,完成后会对原有文件进行替换。

保存时间点配置

在redis.conf文件中可以设置每N秒之后M个Key发生了写操作就保存快照。

格式为:save save 900 1 # 900秒之后至少有1个Key发生写操作save 300 10 # 300秒之后至少有10个Key发生写操作save 60 10000 # 60秒之后至少有10000个Key发生写操作

先检查60秒之内是否有1000个写操作,再检查300秒之后是否有10个写操作,最后检查900秒之后是否有1个写操作。

如果想要禁用RDB功能可以注释掉所有的save配置,也可以将save配置改为save ""

文件

RDB文件保存在dir配置的指定目录下,默认为redis-server启动目录,RDB文件文件名为dbfilename配置,默认为dump.rdb文件名,我们可以更改dir和dbfilename配置修改文件保存的路径和文件名。

dir ./dbfilename dump.rdb

通过 config set dir {newDir} 动态修改dir配置

> config set dir /Users/JAVA/Redis/RDBOK

通过 config set dbfilename {newDbfilename} 动态修改RDB文件名称

> config set dbfilename backup.rdbOK

压缩

RDB文件默认以LZF算法压缩保存,rdbcompression配置默认为yes,当改为no时表示不压缩。

rdbcompression yes

通过 config set rdbcompression {yes|no} 动态修改是否压缩

错误处理

当快照过程中发生错误可以通过stop-writes-on-bgsave-error配置禁止Redis再写入数据,默认为yes开启。

stop-writes-on-bgsave-error yes

通过 config set stop-writes-on-bgsave-error {yes|no} 动态修改是否开启RDB文件快照过程出错时禁止写入数据到Redis.

检验

在版本5中,为了保证RDB文件的完整性会在文件末尾加入一个CRC64的校验码。通过rdbchecksum配置是否开启,如果配置为no则使用0代替CRC64校验码,加载RDB文件时会跳过校验。

rdbchecksum yes

通过 config set rdbchecksum {yes|no} 动态修改是否添加校验码

手动触发命令

save命令

save命令会使用阻塞主进程的方式生成RDB文件,这意味着生成RDB文件过程中其他命令将阻塞等待RDB文件生成完成。所以不建议在生产环境使用。

> saveOK

bgsave和lastsave命令

bgsave命令会使用和自动触发生成RDB文件一样,在后台fork()一个子进程生成RDB文件。可以通过lastsave命令查看是否成功。

> bgsaveBackground saving started> lastsave(integer) 1565190498

优缺点

优点

  1. 保存了某个时间点的快照数据,适合做灾备
  2. RDB的启动速度比AOF快

缺点

  1. 没办法做到实时持久化,在保存时间点未到达时故障,容易丢掉最新数据
  2. fork操作会在创建子进程期间阻塞主进程

redis stream持久化_一文了解:Redis的RDB持久化相关推荐

  1. 怎么让修改的html持久化_一文让你明白Redis持久化

    网上虽然已经有很多类似的介绍了,但我还是自己总结归纳了一下,自认为内容和细节都是比较齐全的. 文章篇幅有 4k 多字,货有点干,断断续续写了好几天,希望对大家有帮助.不出意外地话,今后会陆续更新 Re ...

  2. csrediscore访问redis集群_搭建文档 | centos7.6环境下redis5.0.8集群搭建

    " 本文作者:墨篱弦 " 一.做基础配置 a) 首先创建3个空文件 mkdir -p /server/redis_cluster/7001/datamkdir -p /server ...

  3. 一个项目部署多个节点会导致锁失效么_一文看透 Redis 分布式锁进化史(解读 + 缺陷分析)...

    各个版本的Redis分布式锁 V1.0 V1.1 基于[GETSET] V2.0 基于[SETNX] V3.0 V3.1 分布式Redis锁:Redlock 总结 <Netty 实现原理与源码解 ...

  4. redis 命令别名_【死磕 Redis】 哨兵(一):部署哨兵架构

    在介绍 Redis 主从复制的时候,提到了相比于单机的 Redis 架构,主从复制架构具有如下优势: 保证数据安全性.从节点作为主节点备份,一旦主节点不可用,从节点可以顶上去,保证了数据尽量不被丢失 ...

  5. k8s redis集群_基于K8S部署redis哨兵集群

    本 文 主 要 内 容 什么是Kubernetes分布式容器管理平台 PaaS平台redis-sentinel集群架构简介 PaaS平台部署redis哨兵集群 redis-sentinel容器测试及验 ...

  6. nodejs redis 过期时间_别在为Redis面试而烦恼了?看完暴答【面试管】

    Redis面试官喜欢问的,小伙伴们看完暴答面试官!!!  Redis 是什么?都有哪些使用场景?Redis 是一个使用 C 语言开发的高性能键值对(key-value)的内存数据库,性能优秀,数据在内 ...

  7. redis 公网 安全_请务必注意 Redis 安全配置,否则将导致轻松被入侵

    改了下标题,不吸引人都没人看 一.前言 前段时间,在做内网影响程度评估的时候写了扫描利用小脚本, 扫描后统计发现,内网中 60% 开放了 redis6379 端口的主机处于可以被利用的危险状态,因为都 ...

  8. thinkphp6实现redis连接池_详解thinkphp+redis+队列的实现代码

    1,安装Redis,根据自己的PHP版本安装对应的redis扩展(此步骤简单的描述一下) 1.1,安装 php_igbinary.dll,php_redis.dll扩展此处需要注意你的php版本如图: ...

  9. python redis list操作_使用Python操作redis

    在使用python操作redis之前,需要先安装redis库: pip install redis. 创建连接方式: StrictRedis:实现大部分官方命令. Redis:是StrictRedis ...

最新文章

  1. 【转】Oracle SPARC SuperCluster全能王:不改大道至简本色
  2. scrapy 分布式爬虫- RedisSpider
  3. 20180719 (内置函数68个)
  4. Asp.Net MVC 关于npoi导出excel的方法
  5. 产品经理在工作中如何进行沟通
  6. 四则运算关于加括号的思路
  7. Vue语法学习第一课——插值
  8. dj电商-架构与布局
  9. wifi情况下使用fiddler_fiddler常见的应用场景
  10. ol2 和 bootstrap样式冲突的问题
  11. 阿里2015回顾面试招收学历(获得成功offer)
  12. JAVA手机软件JAR和JAD文件内部文件详解
  13. plc应用与c语言编程区别,PLC编程与应用入门基础知识
  14. 邮件、社交营销最全“勾搭”策略
  15. 图像风格迁移 CycleGAN原理
  16. 一些BIM的相关概念
  17. 操作系统的基本类型、工作流程及其优缺点
  18. 关于里程碑图 2017.01
  19. 【话题:工作生活】2020年工作总结--杭漂结束,沪漂开始。
  20. 数据分析案例——销售利润不达标原因分析及应对策略

热门文章

  1. 无意看到,当真给力!记住:永远不要在MySQL中使用UTF-8
  2. leetcode 678. Valid Parenthesis String | 678. 有效的括号字符串(带缓存的暴力递归)
  3. leetcode 215. Kth Largest Element in an Array | 215. 数组中的第K个最大元素(Java)
  4. java安全编码指南之:方法编写指南
  5. java 8 Streams简介
  6. php单机session消失_Session 失效的原因汇总及解决丢失办法
  7. vue_组件_非prop特性
  8. 【已解决】Error: could not open `C:\Program Files\Java\jre1.8.0_121\lib\amd64\jvm.cfg‘
  9. 大根堆的删除c语言,小根堆大根堆的动态创建与堆顶元素删除
  10. Linux基础优化方法(三)———字符集编码设置优化