RDB 配置解释

在 redis.conf 文件中,默认有 RDB 持久化配置:

save 900 1
save 300 10
save 60 10000
复制复制失败复制成功

解释:

  • 这些配置称为检查点。

  • 每隔 900s,如果有至少 1 个 key发生了变更,就生成一个新的 dump.rdb 文件,这个 dump.rdb 文件就是 redis 内存中完整的数据快照,也叫做 snapshotting。

  • 同上,每隔 300s,检查是否有 10 个key 发生了变更,或者每隔 60s,检查是否有 10000个 key 发生了变更,如果有,则生成 dump.rdb 文件。

  • 可以配置多项检查点。

  • 可以移除所有检查点,只需要这样配置即可:save "",或者移除所有配置项。

RDB 持久化的工作流程

(1)Redis 根据配置尝试生成 rdb 快照文件。

(2)Redis fork 一个子进程。

(3)子进程尝试将数据 dump 到一个临时的 RDB 快照文件中。

(4)完成快照后,就把临时文件替换掉之前生成的 RDB 文件。

RDB 实验

实验(1)测试 Redis 被 shutdown 时,Redis 是否会丢失数据。

首先重启 Redis,让检查点的时间窗口重置。

redis-cli shutdown
cd /etc/init.d
./redis_6379 start
ps -ef | grep redis
复制复制失败复制成功

然后往 Redis 中插入几条数据:

redis-cli
set key1 abc
set key2 222
get key1
get key2
复制复制失败复制成功

目前只设置了 2 个 key,且还没有到 900 s,所以不会触发自动生成 RDB 快照。

这个时候我们可以猜测下重启 redis 后,刚刚插入的两个 key 是否被持久化到 dump 文件中了。

我们来测试下:

重启 Redis,获取 key1 和 key2:

redis-cli shutdown
cd /etc/init.d
./redis_6379 start
ps -ef | grep redis
redis-cli
get key1
get key2
复制复制失败复制成功

会看到 Redis 重启后还是存在 key1 和 key2,并不会丢失。

另外还可以找下 dump.rdb 文件,更新时间更新为 shutdown 的时间。

结论:shutdown 时,Redis 不会丢失丢失,会将内存中的数据立即生成一份完整 RDB 快照。

实验(2)用 kill -9 直接干掉 Redis,模拟 Redis 故障,验证数据是否会丢失。

首先插入几条新数据

redis-cli
set key3 333
set key4 444
get key3
get key4
复制复制失败复制成功

然后获取 Redis 的进程 id

ps -ef | grep redis复制复制失败复制成功

Redis PID=1485,然后用 kill -9 干掉 Redis 进程:

kill -9 1485复制复制失败复制成功

然后重启 Redis

cd /var/run
rm -rf redis_6379.pid
cd /etc/init.d
./redis_6379 start
复制复制失败复制成功

然后获取 key3 和 key4,发现没有这两个 key。

get key3
get key4
复制复制失败复制成功

我们也可以查看下 dump.rdb 文件的更新时间是否有改变:

如果我们想要保证减少 Redis 故障导致的数据丢失,可以通过设置一个频率更高的检查点,每 5s 检查一次,如果有至少一条数据更新,则进行 RDB 快照。如下所示的配置:

save 5 1复制复制失败复制成功

但是如果故障正好发生在快照之前,那么变更的数据就没有生成到 RDB 文件中了。

而且生成的 RDB 的频率过高,而且变更的数据量很大的话,生成 RDB 的文件也会很大,操作 IO 的时间也会变长,长时间占用磁盘 IO 会造成性能问题。

Redis实战(二)Redis 的 RDB 配置和数据恢复的更多相关文章

  1. Redis实战之Redis + Jedis

    用Memcached,对于缓存对象大小有要求,单个对象不得大于1MB,且不支持复杂的数据类型,譬如SET 等.基于这些限制,有必要考虑Redis! 相关链接: Redis实战 Redis实战之Redi ...

  2. Redis实战之Redis + Jedis[转]

    http://blog.csdn.net/it_man/article/details/9730605 2013-08-03 11:01 1786人阅读 评论(0) 收藏 举报   目录(?)[-] ...

  3. Redis系列(二):Redis的数据类型及命令操作

    原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...

  4. C# Redis实战(二) [转]

    二.Redis服务  在C# Redis实战(一)中我将所有文件拷贝到了D盘redis文件夹下,其中redis-server.exe即为其服务端程序,双击即开始运行,如图               ...

  5. C# Redis实战(二)

    二.Redis服务  在C# Redis实战(一)中我将所有文件拷贝到了D盘redis文件夹下,其中redis-server.exe即为其服务端程序,双击即开始运行,如图             可以 ...

  6. Redis实战(二)

    Redis服务 在C# Redis实战(一)中我将所有文件拷贝到了D盘redis文件夹下,其中redis-server.exe即为其服务端程序,双击即开始运行,如图

  7. Redis实战总结-Redis的高可用性

    在之前的博客<Redis实战总结-配置.持久化.复制>给出了一种Redis主从复制机制,简单地实现了Redis高可用.然后,如果Master服务器宕机,会导致整个Redis瘫痪,这种方式的 ...

  8. 分布式缓存技术redis学习系列(五)——redis实战(redis与spring整合,分布式锁实现)

    本文是redis学习系列的第五篇,点击下面链接可回看系列文章 <redis简介以及linux上的安装> <详细讲解redis数据结构(内存模型)以及常用命令> <redi ...

  9. 分布式缓存技术redis系列(五)——redis实战(redis与spring整合,分布式锁实现)

    本文是redis学习系列的第五篇,点击下面链接可回看系列文章 <redis简介以及linux上的安装> <详细讲解redis数据结构(内存模型)以及常用命令> <redi ...

  10. Redis 实战 —— 05. Redis 其他命令简介

    发布与订阅 P52 Redis 实现了发布与订阅(publish/subscribe)模式,又称 pub/sub 模式(与设计模式中的观察者模式类似).订阅者负责订阅频道,发送者负责向频道发送二进制字 ...

随机推荐

  1. JWT的原理及使用

    目录 JWT的原理及使用 一.什么是JWT? 二.签发认证流程 三.使用方法 1.设置登录接口 2.设置过期事件 3.定制返回格式 4.配置认证类和权限类 5.写登录逻辑 5.配路由 JWT的原理及使 ...

  2. 【源码】RapidJSON 源码剖析(0):关于 RapidJSON

    RapidJSON 源码剖析(0):关于 RapidJSON 为什么会有<RapidJSON 源码剖析>系列博文? 之前转载的 Technique to Read Source Code ...

  3. TCP/IP协议(1): IP 地址和寻址方式 —— IP 协议的基础

    TCP/IP协议(1): IP 地址和寻址方式 -- IP 协议的基础 最近在重学计算机网络,给自己立一个 flag,有感而发的时候写关于 TCP/IP 协议栈的系列博客. IP 地址 IP 地址(I ...

  4. CF863E - Turn Off The TV

    题意:对于若干个闭区间 \([l_i,r_i]\),它们构成了一个集合 \(\bigcup_{i\le n}{[l_i,r_i]}\),求一个 \(k\),使得 \(\bigcup_{i\le n}{ ...

  5. java数据结构与算法(day2)--简单排序

    模式:设计api实现api 简单排序 举例(商品排序) 1.1Comparable接口介绍(排序算法更有通用性:对象排序) 创建对象,并且生成豆子.创建Comparable接口 1 package c ...

  6. C#的闭包捕获变量与英语中Nice to meet you的联系

    看标题有种"意大利面与42号混凝土"放在一起说的感觉,实际上,就是. 闭包捕获变量 我们都知道在C#里,闭包捕获的是变量,而不是变量值本身 每个Task在运行的时候,发现i的值是3 ...

  7. 溢出标志位OF与进位标志位CF判断

    1.OF与CF概述 OF(Overflow Flag,溢出标志位):有符号数之间加减运算的溢出标志 CF(Carry Flag,进位标志位):无符号数之间加减运算的溢出标志 快速判断(加法)(减法可转 ...

  8. 开始学python不知该怎么学?Python基础教程(第2版) 免费下载

    Python基础教程(第2版)pdf高清版免费下载  解压码:n0nl   内容简介  · · · · · · 本书是经典教程的全新改版,作者根据Python 3.0版本的种种变化,全面改写了书中内容 ...

  9. codeforce D. Concatenated Multiples

    http://codeforces.com/contest/1029/problem/D 看C题的第一眼就觉得自己一定能做出来,结果就兴致勃勃地做了一天,最后做出来了.但看到这道题时,第一感觉就是&q ...

  10. huawei--配置链路聚合

    huawei--配置链路聚合 项目要求: LSW1和LSW2之间配置链路聚合,链路聚合分为手工和lacp两种模式.配置完后查看链路聚合状态. 项目实施: (vlan10 20 30的创建命令vlan ...