rdb快照持久化

模板网 2021-04-14

一、持久化的方式

什么是持久化:redis所有数据保存在内存中,对数据的更新将异步保存到磁盘上。

持久化:即把数据存储于断电后不会丢失的设备中,通常是硬盘。

常见的持久化方式:
主从:通过从服务器保存和持久化,如mongoDB的replication sets配置
日志:操作生成相关日志,并通过日志来恢复数据

couchDB对于数据内容的修改,只追加,则文件本身就是日志,不会丢失数据。

二、redis-之rdb快照持久化

1、手动save(同步)

手动向redis客户端发送save命令。redis会同步dump rdb文件,此过程会阻塞其他命令。
>redis save
ok

缺点:由于是同步的命令,所以当数据量比较大的时候会造成阻塞。
文件策略:如果存在老的rdb文件,新的替换老的。
复杂度:o(n)

2、手动bgsave(异步)

手动向redis客户端发送bgsave命令。redis会异步dump rdb文件,此过程不会阻塞其他命令。
>redis bgsave
Backgroud saving started

redis主进程会fork()一个子进程用来执行dump操作,主进程依然可以处理其他客户端的请求。
当rdb文件生成成功之后,子进程会告诉主进程。

缺点:fork会消耗额外的内存。
文件策略:如果存在老的rdb文件,新的替换老的。
复杂度:o(n)

3、rdb自动的工作原理

1)每隔N分钟或N次写入之后
(2)从内存dump数据形成rdb文件
(3)压缩
(4)放在备份目录
注:N分钟或N次/压缩/目录 部分可以通过参数来配置

三、rdb快照相关参数

配置 seconds changes

save 900 1 #刷新快照到硬盘中,必须满足两者要求才会触发,即900秒之后至少一个关键字发生变化

save 300 10 #必须是300秒之后至少10个关键字发生变化

save 60 10000 #必须是60秒之后至少有10000个关键字发生变化

stop-writes-on-bgsave-error yes #后台存储错误,客户端停止写

rdbcompression yes #使用LZF压缩rdb文件

rdbchecksum yes #存储和加载rdb文件时校验

dbfilename dump.rdb #设置rdb文件名(dump-${port}.rdb)

dir ./ #设置工作目录,rdb文件会写入该目录(bigdiskpath)

四、测试redis性能

在redis的bin目录下面有一个redis-benchmark命令,专门用来测试redis的性能

五、rdb的优势

dump的内存的快照,恢复速度特别快

六、rdb的缺陷

在两个保存点之间,断电

将会丢失1-N分钟的数据

处于对持久化的更精细要求,redis增添了aof方式append only file

七、容易忽略生成rdb文件的几个命令

在我们没有执行save、bgsave也没有配置自动dump的策略,那么为什么依然会生成rdb文件呢? 这时候可以考虑一下几点:

1、全量复制(比如在主从模式下的复制)
2、debug reload
3、shutdown

相关文章

  1. 递归和分治思想

    一、斐波那契数列 1 1 2 3 5 8 13 21 34 55 89 144 ...... 我们可以用数学函数来定义: |0,当n = 0 F(n) = |1,当n = 1

  2. python多线程

    一、介绍 多任务可以由多进程完成,也可以由一个进程内的多线程完成。 我们前面提到了进程是由若干线程组成的,一个进程至少有一个线程。 由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线

  3. aof恢复与rdb服务器迁移

    一、不小心flushall或flushdb了怎么办??? 只有aof还不够。 因为如果发生重写,aof文件里就什么都没有了。 所以要及时shutdown nosave,防止aof重写!!! 然后将a

  4. 浏览器的同源策略

    一、同源的三个条件 1、域名(二级域名与一级域名之间也算是不同源) 2、端口 3、协议 二、同源策略的意义 浏览器基于用户的隐私安全目的, 防止恶意网站窃取数据(只是浏览器有这个同源策略设置,但是

  5. VirtualBox 中安装 Ubuntu 虚拟机并配置文件共享

    安装后,有时出现共享目录无法加载的现象,最后决定放弃,采用 VMWare Player !! 安装 VirtualBox 访问 https://www.virtualbox.org/ 下载最新版 V

随机推荐

  1. 递归和分治思想

    一、斐波那契数列 1 1 2 3 5 8 13 21 34 55 89 144 ...... 我们可以用数学函数来定义: |0,当n = 0 F(n) = |1,当n = 1

  2. python多线程

    一、介绍 多任务可以由多进程完成,也可以由一个进程内的多线程完成。 我们前面提到了进程是由若干线程组成的,一个进程至少有一个线程。 由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线

  3. aof恢复与rdb服务器迁移

    一、不小心flushall或flushdb了怎么办??? 只有aof还不够。 因为如果发生重写,aof文件里就什么都没有了。 所以要及时shutdown nosave,防止aof重写!!! 然后将a

  4. 浏览器的同源策略

    一、同源的三个条件 1、域名(二级域名与一级域名之间也算是不同源) 2、端口 3、协议 二、同源策略的意义 浏览器基于用户的隐私安全目的, 防止恶意网站窃取数据(只是浏览器有这个同源策略设置,但是

  5. VirtualBox 中安装 Ubuntu 虚拟机并配置文件共享

    安装后,有时出现共享目录无法加载的现象,最后决定放弃,采用 VMWare Player !! 安装 VirtualBox 访问 https://www.virtualbox.org/ 下载最新版 V