从这一个介绍里面知道,redis比memcache作为缓存数据库强大的地方,一个是支持的数据类型比较多,另一个就是redis持久化功能。

下面就介绍Redis的持久化之RDB!

一:什么是redis的持久化

官网介绍:

英文:https://redis.io/topics/persistence

中文:http://www.redis.cn/topics/persistence.html

二:Redis的RDB是什么?

在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里,Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到。

一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能。如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。

备注解释:

--fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程--AOF方式,点击这里查看[待补充]!

三:Redis配置文件redis.conf中关于RDB的相关配置

首先贴出来配置信息:

################################ SNAPSHOTTING ################################

#

# Save the DB on disk:

#

# save#

# Will save the DBifboth the given number of seconds and the given

# number of write operations against the DB occurred.

#

# In the example below the behaviour will be to save:

# after900 sec (15 min) if at least 1key changed

# after300 sec (5 min) if at least 10keys changed

# after60 sec if at least 10000keys changed

#

# Note: you can disable saving completely by commentingout all "save"lines.

#

# Itisalso possible to remove all the previously configured save

# points by adding a save directive with a single emptystringargument

# likeinthe following example:

#

# save""save900 1save300 10save60 10000# Bydefault Redis will stop accepting writes ifRDB snapshots are enabled

# (at least one save point) and the latest background save failed.

# This will make the user aware (in a hard way) that data isnot persisting

# on disk properly, otherwise chances are that no one will notice and some

# disaster will happen.

#

# If the background saving process will start working again Redis will

# automatically allow writes again.

#

# Howeverifyou have setup your proper monitoring of the Redis server

# and persistence, you may want to disablethisfeature so that Redis will

#continue to work as usual even ifthere are problems with disk,

# permissions, and so forth.

stop-writes-on-bgsave-error yes

# Compressstring objects using LZF when dump .rdb databases?# Fordefault that's set to'yes'as it's almost always a win.

# If you want to save some CPUin the saving child set it to 'no'but

# the dataset will likely be biggerifyou have compressible values or keys.

rdbcompression yes

# Since version5 of RDB a CRC64 checksum isplaced at the end of the file.

# This makes the format more resistant to corruption but thereisa performance

# hit to pay (around10%) when saving and loading RDB files, so you can disable it

#formaximum performances.

#

# RDB files created with checksum disabled have a checksum of zero that will

# tell the loading code to skip the check.

rdbchecksum yes

# The filenamewhereto dump the DB

dbfilename dump.rdb

# The working directory.

#

# The DB will be written insidethisdirectory, with the filename specified

# aboveusing the 'dbfilename'configuration directive.

#

# The Append Only File will also be created insidethisdirectory.

#

# Note that you must specify a directory here, not a file name.

dir ./

如果上面的配置文件有看不懂,请点击这里进行想关的查看了解:Redis配置文件-redis.conf详解

1:如何触发RDB快照

- 配置文件中默认的快照配置

save 900 1save300 10save60 10000

命令save或者是bgsave

SAVE:save时只管保存,其它不管,全部阻塞

BGSAVE:Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。可以通过lastsave

命令获取最后一次成功执行快照的时间

注:执行flushall命令,也会产生dump.rdb文件,但里面是空的,无意义

2:默认RDB方式保存的是dump.rdb文件,恢复也是识别的是dump.rdb

3:配置位置,以及快照恢复

查看目录

CONFIG GET dir获取目录

###将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可 或者就在当前目录启动

举例:

我的redis启动服务的目录是 /usr/local/bin 下面

我启动redis的目录是/root 下面,然后生成的的dump.rdb 文件也是在/root 目录下,假如redis服务器出现问题,挂掉了。那么想要根据rdb恢复数据

(1)将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务

(2)当前目录启动

如果我的dump.rdb 在/root下面,而我到/usr/local/bin这个目录下去启动了redis,那么数据是无法恢复的。只能从 /root 下面启动才能看到之前保存的数据。

如下操作:

127.0.0.1:6379>CONFIG GET dir #获取当前操作的目录1) "dir"

2) "/root"

127.0.0.1:6379> KEYS *#redis中存在的key1) "myhash"

2) "k3"

3) "mylist"

4) "b1"

5) "du1"

6) "k1"

7) "b4"

8) "key1"

9) "d"

10) "myset"

11) "du11"

12) "list"

13) "b3"

14) "du"

15) "b2"

16) "skey"

17) "k2"

127.0.0.1:6379>

下面我关闭redis,假设redis服务挂掉!

127.0.0.1:6379>SHUTDOWN #关闭服务器

[root@localhost~]# pwd #当前目录是/root/root

[root@localhost~]# ll #下面有dump.rdb这个文件

总用量52

-rw-------. 1 root root 1208 6月 14 08:10 anaconda-ks.cfg

drwxr-xr-x. 3 root root 4096 6月 17 04:35dufy-rw-r--r--. 1 root root 283 6月 19 00:13dump.rdb-rw-r--r--. 1 root root 24772 6月 14 08:10install.log-rw-r--r--. 1 root root 7690 6月 14 08:09 install.log.syslog

那么当我进入/usr/local/bin 目录下启动重新启动redis,看数据是否恢复

[root@localhost ~]# cd /usr/local/bin/[root@localhost bin]# pwd/usr/local/bin

[root@localhost bin]# redis-server /root/dufy/redis/redis-3.0.4/redis.conf

[root@localhost bin]# redis-cli127.0.0.1:6379> KEYS *# 这里启动后,查看key没有恢复

(empty list orset)127.0.0.1:6379>

那么我再次关闭服务,从/root下启动redis看数据是否恢复

127.0.0.1:6379>SHUTDOWN

not connected>exit

[root@localhost bin]# cd/root/[root@localhost~]# pwd/root

[root@localhost~]# redis-server /root/dufy/redis/redis-3.0.4/redis.conf

[root@localhost~]# redis-cli127.0.0.1:6379> KEYS *#重启后,查看key,发现恢复成功了!1) "k1"

2) "b1"

3) "key1"

4) "list"

5) "du11"

6) "du1"

7) "b4"

8) "k3"

9) "myhash"

10) "b3"

11) "d"

12) "skey"

13) "mylist"

14) "du"

15) "k2"

16) "b2"

17) "myset"

127.0.0.1:6379>

相信我这些操作,也讲明白快照恢复,上面说的这一句:将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可或者就在当前目录启动。

四:Redis优点

适合大规模的数据恢复

对数据完整性和一致性要求不高

五:Redis缺点

在一定间隔时间做一次备份,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改-fork的时候,内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑

六:如何停止RDB

1: 配置文件注释掉

save 900 1save300 10save60 10000

启动 # save “”, 去掉 #。保存后重启

2:动态停止RDB命令

在redis-cli中执行:

config set save ""

七:大总结

内存中的数据对象 --->rdbsave -->磁盘中的rdb文件

内存中的数据对象

RDB是一个非常紧凑的文件

RDB在保存RDB文件时父进程唯一需要做的就是folk出一个子进程,接下来工作全部交给子进程来做,父进程不需要再做其他IO操作,所以RDB持久化方式可以最大化redis的性能

与AOF相比,在恢复大的数据时候,RDB方式更快一些

数据丢失风险大

RDB需要经常folk子进程来保存数据集到磁盘,当数据集比较大额时候,folk的过程是比较耗时的,可能会导致redis在一些毫秒级不能响应客服端请求

原文:https://blog.csdn.net/u010648555/article/details/73433717

redis 备份导出rdb_Redis学习——Redis持久化之RDB备份方式保存数据相关推荐

  1. redis 备份导出rdb_redis简单安装学习

    redis 介绍 Redis是noSql也就是非关系型数据库,可以用来做缓存,缓存就是在内存中存储的数据备份,当数据没有发生本质改变的时候,我们就不让数据的查询去数据库进行操作,而去内存中取数据,这样 ...

  2. redis 备份导出rdb_Redis持久化知识点—RDB+AOF ,你了解多少

    本文主要深入了解RDB和AOF这两种持久化的逻辑和原理,喜欢的朋友欢迎点赞,写得不对的也请大佬多多批评和指正,以期共同进步,谢谢啦. RDB的原理 RDB持久化存储即是将redis存在内存中的数据以快 ...

  3. redis 备份导出rdb_Redis数据迁移利器之redisshake

    " 当需要进行Redis实例或集群数据迁移时,我们可以采用导出/导入的方式进行数据迁移,但当需要做数据异地灾备或双活时,再使用传统的方式就不合适了,我们需要借助工具(如redis-port/ ...

  4. 【Redis笔记】一起学习Redis | 如何利用Redis实现一个分布式锁?

    一起学习Redis | 如何利用Redis实现一个分布式锁? 前提知识 什么是分布式锁? 为什么需要分布式锁? 分布式锁的5要素和三种实现方式 实现分布式锁 思考思考 基础方案 改进方案 保证setn ...

  5. Redis核心技术与实战-学习笔记(十四):时间序列数据

    一.时间序列数据 时间序列数据:没有严格的关系模型,记录的信息可以表示成键和值的关系. (例如,一个设备ID对应一条记录): 时间序列数据的读写特点 持续高并发写入,需要连续记录数万个设备的实时状态值 ...

  6. Android学习笔记36:使用SQLite方式存储数据

    在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...

  7. Vue.js-Day01-AM【第一次学习-安装、基础使用(引入方式)、数据展示、指令介绍(v-html、v-text、v-bind、v-if、v-for】

    Vue.js实训[基础理论(5天)+项目实战(5天)]博客汇总表[详细笔记] 目   录 1.讲在前面 课程内容 实训课内容 2.Vue.js介绍 2.1.安装 开发环境 版本介绍 2.2.基础使用 ...

  8. 深入学习Redis持久化

    一.Redis高可用概述 在介绍Redis高可用之前,先说明一下在Redis的语境中高可用的含义. 我们知道,在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常 ...

  9. android平台上持久化存储3种手段_深入学习Redis :持久化

    前言 在上一篇文章中,介绍了Redis的内存模型,从这篇文章开始,将依次介绍Redis高可用相关的知识--持久化.复制(及读写分离).哨兵.以及集群. 本文将先说明上述几种技术分别解决了Redis高可 ...

最新文章

  1. 谷歌迂回入华:Waymo无人车抢先进驻上海!
  2. 数组作为形参时的一个陷阱
  3. #绘制圆心_SolidWorks2018 绘制草图轮廓练习
  4. zookeeper  虚拟机zookeeper和 win10java代码连接
  5. Sql Server全局变量(转)
  6. 信息学奥赛一本通(1134:合法C标识符查)
  7. 构件与构架,我的理解
  8. 使用next.js完成从开发到部署
  9. 独角访谈 | 去中心化交易所领军人物–Loi Luu
  10. 集合类和JAVA多线程
  11. iphonex屏幕出现一条绿线_苹果x出现闪屏乱跳怎么回事
  12. 联想T110 8G优盘 安国AU6983主控量产成功
  13. 分布式web系统架构图及应用架构图
  14. Vue.js下载与安装
  15. [UWP/WPF]在应用开发中安全使用文件资源
  16. 班级网站(网页设计实验)
  17. 网络钓鱼仍然是安全行业的祸害
  18. Enterprise Architect教程
  19. 都是古人抓紧时间发奋苦读的典范
  20. ffmpeg+h264_nvenc+vs2019配置编译

热门文章

  1. idea lombok插件安装_开发效率不高?墙裂推荐这十款精选 IntelliJ IDEA 插件
  2. php js多语言切换,php简单实现多语言切换的方法_php技巧
  3. lambda函数if_Python中lambda的使用,与它的三个好基友介绍
  4. (0.2.2)如何下载mysql数据库(二进制、RPM、源码、YUM源)
  5. python爬虫网页图片并保存到本地
  6. MySQL------存储过程的使用
  7. 擠出機步進馬達的 Steps per Unit 該如何計算?
  8. Android Studio中导入第三方库
  9. ExtJs4 学习一
  10. python html做界面_[Python]简单的HTML页面合并脚本