redis 备份导出rdb_Redis学习——Redis持久化之RDB备份方式保存数据
从这一个介绍里面知道,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备份方式保存数据相关推荐
- redis 备份导出rdb_redis简单安装学习
redis 介绍 Redis是noSql也就是非关系型数据库,可以用来做缓存,缓存就是在内存中存储的数据备份,当数据没有发生本质改变的时候,我们就不让数据的查询去数据库进行操作,而去内存中取数据,这样 ...
- redis 备份导出rdb_Redis持久化知识点—RDB+AOF ,你了解多少
本文主要深入了解RDB和AOF这两种持久化的逻辑和原理,喜欢的朋友欢迎点赞,写得不对的也请大佬多多批评和指正,以期共同进步,谢谢啦. RDB的原理 RDB持久化存储即是将redis存在内存中的数据以快 ...
- redis 备份导出rdb_Redis数据迁移利器之redisshake
" 当需要进行Redis实例或集群数据迁移时,我们可以采用导出/导入的方式进行数据迁移,但当需要做数据异地灾备或双活时,再使用传统的方式就不合适了,我们需要借助工具(如redis-port/ ...
- 【Redis笔记】一起学习Redis | 如何利用Redis实现一个分布式锁?
一起学习Redis | 如何利用Redis实现一个分布式锁? 前提知识 什么是分布式锁? 为什么需要分布式锁? 分布式锁的5要素和三种实现方式 实现分布式锁 思考思考 基础方案 改进方案 保证setn ...
- Redis核心技术与实战-学习笔记(十四):时间序列数据
一.时间序列数据 时间序列数据:没有严格的关系模型,记录的信息可以表示成键和值的关系. (例如,一个设备ID对应一条记录): 时间序列数据的读写特点 持续高并发写入,需要连续记录数万个设备的实时状态值 ...
- Android学习笔记36:使用SQLite方式存储数据
在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...
- 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.基础使用 ...
- 深入学习Redis持久化
一.Redis高可用概述 在介绍Redis高可用之前,先说明一下在Redis的语境中高可用的含义. 我们知道,在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常 ...
- android平台上持久化存储3种手段_深入学习Redis :持久化
前言 在上一篇文章中,介绍了Redis的内存模型,从这篇文章开始,将依次介绍Redis高可用相关的知识--持久化.复制(及读写分离).哨兵.以及集群. 本文将先说明上述几种技术分别解决了Redis高可 ...
最新文章
- 谷歌迂回入华:Waymo无人车抢先进驻上海!
- 数组作为形参时的一个陷阱
- #绘制圆心_SolidWorks2018 绘制草图轮廓练习
- zookeeper 虚拟机zookeeper和 win10java代码连接
- Sql Server全局变量(转)
- 信息学奥赛一本通(1134:合法C标识符查)
- 构件与构架,我的理解
- 使用next.js完成从开发到部署
- 独角访谈 | 去中心化交易所领军人物–Loi Luu
- 集合类和JAVA多线程
- iphonex屏幕出现一条绿线_苹果x出现闪屏乱跳怎么回事
- 联想T110 8G优盘 安国AU6983主控量产成功
- 分布式web系统架构图及应用架构图
- Vue.js下载与安装
- [UWP/WPF]在应用开发中安全使用文件资源
- 班级网站(网页设计实验)
- 网络钓鱼仍然是安全行业的祸害
- Enterprise Architect教程
- 都是古人抓紧时间发奋苦读的典范
- ffmpeg+h264_nvenc+vs2019配置编译
热门文章
- idea lombok插件安装_开发效率不高?墙裂推荐这十款精选 IntelliJ IDEA 插件
- php js多语言切换,php简单实现多语言切换的方法_php技巧
- lambda函数if_Python中lambda的使用,与它的三个好基友介绍
- (0.2.2)如何下载mysql数据库(二进制、RPM、源码、YUM源)
- python爬虫网页图片并保存到本地
- MySQL------存储过程的使用
- 擠出機步進馬達的 Steps per Unit 該如何計算?
- Android Studio中导入第三方库
- ExtJs4 学习一
- python html做界面_[Python]简单的HTML页面合并脚本