一、持久化

实现持久化的方式有两种RDB、AOF

基于RDB方式做持久化

RDB是基于快照模式实现的,所保存的数据文件默认dump.rdb,具体产生这个数据文件的方式有两种:
方式1:客户端执行save或者bgsave命令

  1. 用save方式你的话,是在主线程中保存快照,也就是说在save执行完成之前所有的操作都会被阻塞,因为这是同步保存的。
  2. 在执行save保存数据的时候,不是做增量保存,而是将内存中的全部数据做一次同步,所以这个过程会很慢。
  3. 用bgsave的话,这个是基于异步的方式,也就是执行这个命令以后,会立刻告诉你已经执行启动,但是不会阻塞用户,而是在后台悄悄的运行。

方式2:提前做好计划任务

  1. 基于计划任务自动做同步的话,是在子进程中实现。具体过程是子进程会会打开一个文件,将数据保存到这个新文件中,在完成以后改名为dump.rdb就可以了。

基于AOF方式做持久化

相对而言,AOF模式比RDB更为可靠。这种方式之所以可靠是因为快照的方式是周期性的,比如每隔10秒做一次,但是如果在做了一次持久化之后,还没有到下一次系统就崩溃了,那么这段时间的数据就丢失了。
AOF有有点类似于mysql的二进制日志,这个文件会记录下每次所执行的语句(主要是写操作),每次的操作都会追加到文件的末尾。当Redis重启的时候,可以通过aof文件中的命令实现在内存中重建数据库。

但是aof这种方式也是有缺点的:

  1. 可能会有很多重复的内容,比如执行100次incre,文件就会记录100条,这明显是不合理的(事实上redis进程会扫描aof中重复的事件,并进行合并)
  2. aof文件会变得越来越大,为了解决这个问题,redis提供了一个命令BGREWRITEAOF,通过这个命令可以实现AOF文件的重写,需要注意的是这种重写机制是比较特殊的,因为在重写的时候,是不会去读取原来的aof文件,而是直接读取内存中的数据,将内存中的数据生成一个指令集,并将指令集保存在一个临时文件,在这个临时文件保存完成之后,就会用这个历史文件去替换原来的那个aof文件,完成重写aof文件的过程。so,aof文件可以通过重写的方式将其变小。

重写过程:

  1. Redis主进程通过fork创建子进程;
  2. 子进程根据Redis内存中的数据创建数据库重建命令序列于临时文件中;
  3. 父进程继承 client的请求,并会把这些请求中的写操作继续追加到原来的aof文件,额外地,这些新的写请求还会被防止于一个新的缓冲队列中;
  4. 子进程重写完成,会通知父进程,父进程把缓冲中的命令写到临时文件中
  5. 父进程用临时文件替代aof文件;

相关配置

  1. 与RDB相关的配置
# 设置同步周期
save 900 1
save 300 10
save 60 10000
# 进行快照备份的时候,一旦监控到持久化发生了错误,是否停止下来
stop-writes-on-bgsave-error yes
# rdb文件是否执行压缩来节省空间
rdbcompression yes
# 是否校验rdb文件
rdbchecksum yes
# rdb文件的文件名
dbfilename dump.rdb
# rdb文件的位置
dir /var/lib/redis
  1. 与AOF相关的配置
# 指定是否启用aof持久化
appendonly yes
# 当aof文件的大小增长了指定比例的时候,执行一次重写操作
auto-aof-rewrite-percentage 100
# 指定aof文件做重写最小值
auto-aof-rewrite-min-size 64mb
# aof持久化信息保存在哪个文件中(相当于mysql的二进制日志文件)
appendfilename "appendonly.aof"
# 一旦执行了操作,会立刻将操作的语句记录到aof文件中
# appendfsync always
# 每秒向aof文件进行一次写入操作
appendfsync everysec
# 不主动向aof执行写入操作,由系统自行判断何时向磁盘执行写入操作
# appendfsync no
#在做重写的时候,新的写操作不做fsync
no-appendfsync-on-rewrite no
# 当aof文件备被损坏时,redis返回错误并推出
aof-load-truncated yes

实际生产环境中肯定是同时使用rdb和aof的,那么就会有一个问题,就是如果在某个时间点同时出发了AOF和RDB持久化,那么会对磁盘熊带来很大的压力,所以通常我们的Redis会禁止同时做持久化操作,如果正在做RDB的持久化,那么及时此时触发了AOF的持久化也是不会执行的。

二、备份

  1. 在有持久化的情况下,数据会自动保存在文件中,这里为了演示现将持久化关闭。
# 修改配置文件
[root@BIGBOSS ~]# vim /etc/redis.conf
# 禁止快照方式的持久存储
save ""#save 900 1
#save 300 10
#save 60 10000
# 禁止AOF方式的持久存储
appendonly no
  1. 删除之前的数据,并重启服务
[root@BIGBOSS ~]# rm -rf /var/lib/redis/dump.rdb
[root@BIGBOSS ~]# systemctl restart redis
  1. 在redis中填充一些数据
10.220.5.171:6379> DBSIZE
(integer) 0
10.220.5.171:6379> set name cx
OK
10.220.5.171:6379> set age 20
OK
10.220.5.171:6379> set addr tianjin
OK
10.220.5.171:6379> DBSIZE
(integer) 3
  1. 退出redis,再重新进入发现这些key依然存在(这些值是存在内存中的)
10.220.5.171:6379> exit
[root@BIGBOSS ~]# redis-cli -h 10.220.5.171
10.220.5.171:6379> DBSIZE
(integer) 3
  1. 但是如果重启Redis这些数据就没有了
10.220.5.171:6379> exit
[root@BIGBOSS ~]# systemctl restart redis
[root@BIGBOSS ~]# redis-cli -h 10.220.5.171
10.220.5.171:6379> DBSIZE
(integer) 0
  1. 重新插入数据,并手动执行保存
10.220.5.171:6379> DBSIZE
(integer) 0
10.220.5.171:6379> set name cx
OK
10.220.5.171:6379> set age 20
OK
10.220.5.171:6379> set addr tianjin
OK
10.220.5.171:6379> save
OK
  1. 可以看到生成了新的数据文件
[root@BIGBOSS ~]# ls /var/lib/redis/
dump.rdb
  1. 而我们做备份工作的时候,其实就是备份的这个文件,现在我将这个文件备份到tmp下
[root@BIGBOSS ~]# cp /var/lib/redis/dump.rdb  /tmp/
  1. 模拟故障,将/var/lib/redis/dump.rdb删除并重启redis,可以看到数据已经没有了,不过不要慌我们做了备份
[root@BIGBOSS ~]# rm -rf /var/lib/redis/dump.rdb
[root@BIGBOSS ~]# systemctl restart redis
[root@BIGBOSS ~]# redis-cli -h 10.220.5.171
10.220.5.171:6379> DBSIZE
(integer) 0
  1. 将备份数据挪回来,重启Redis查看数据
[root@BIGBOSS ~]# cp /tmp/dump.rdb  /var/lib/redis/
[root@BIGBOSS ~]# ls /var/lib/redis/
dump.rdb
[root@BIGBOSS ~]# systemctl restart redis
[root@BIGBOSS ~]# redis-cli -h 10.220.5.171
10.220.5.171:6379> DBSIZE
(integer) 3

通过上面的操作很明显的我们看到了备份数据和恢复数据的过程,在企业中数据备份也是很重要的一份工作。

------做运维之前很矫情的小年轻-----

Redis持久化和备份数据相关推荐

  1. Redis持久化、备份:RDB和AOF

    RDB持久化与文件相关配置 1.RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照.简单来说就是把内存中的所有数据都记录到磁盘中.当R ...

  2. redis数据丢失_有效避免数据丢失!Redis持久化方案选择详解

    为什么需要持久化呢? 通常情况下redis的数据全部存储在内存中,数据库一旦故障发生重启数据会全部丢失,即使是在redis cluster或者redis sentinel模式下主从同步数据的恢复仍然需 ...

  3. 全面分析战!Redis持久化策略,这么一理顺,才知很简单

    为什么要持久化? 通常情况下redis的数据全部存储在内存中,数据库一旦故障发生重启数据会全部丢失,即使是在redis cluster或者redis sentinel模式下主从同步数据的恢复仍然需要一 ...

  4. Redis持久化:RDB、AOF

    前言 Redis是一种基于内存,通过key-value结构来实现的高性能nosql关系型数据库.它与memcached类似,不过Redis支持数据的持久化,而且支持的数据类型非常的丰富,如:strin ...

  5. php使用redis持久化,Redis持久化完整版本

    持久化的简介 RDB AOF RDB与AOF的区别 持久化应用场景 对于持久化这个功能点,其实很简单没有那么复杂 演示环境 centos7.0 redis4.0 redis存放目录:/usr/loca ...

  6. redis 备份导出rdb_Redis学习——Redis持久化之RDB备份方式保存数据

    从这一个介绍里面知道,redis比memcache作为缓存数据库强大的地方,一个是支持的数据类型比较多,另一个就是redis持久化功能. 下面就介绍Redis的持久化之RDB! 一:什么是redis的 ...

  7. Redis(2)---数据持久化

    Redis(2)---数据持久化 原文:Redis(2)---数据持久化 数据持久化 Redis有两种持久化的方式:快照(RDB文件)和追加式文件(AOF文件) (1)RDB持久化方式是在一个特定的间 ...

  8. redis aof 备份和恢复_深入理解Redis持久化

    redis持久化的意义 持久化机制的介绍 RDB和AOF的基本介绍 RDB持久化机制的优点 RDB持久化机制的缺点 AOF持久化机制的优点 AOF持久化机制的缺点 RDB和AOF到底该如何选择 RDB ...

  9. Redis持久化数据之RDB和AOF

    文章目录 一.RDB(Redis DataBase) 概述 持久化过程 配置 优势和劣势 二.AOF(Append Of File) 概述 AOF持久化过程 AOF 配置 Rewrite 压缩 优势和 ...

最新文章

  1. 【错误记录】Android Studio 向 GitHub 提交代码报错 ( Push failed: Failed with error: Could not read | 使用命令行提交代码 )
  2. echarts词云图形状_用Wordcloud生成指定形状的词云图
  3. 【整理】使用云计算服务面临的几个安全问题
  4. 第十一篇:(顺序)容器的好伴侣 --- 容器适配器
  5. C#学习之unsafe
  6. Ruby 的环境搭建及安装
  7. java.close用法_void close()
  8. python classmethod static_python @classmethod 和 @staticmethod
  9. 《程序设计技术》第五章例程
  10. @selector 如何调用在另一个类中的静态函数?
  11. jquery进度条插件
  12. ps 计算机 性能设置,Photoshop 中的性能首选项
  13. 都说谷歌浏览器好用,网页翻译插件必不可少
  14. Linux CentOS7系统配置IP地址
  15. 【C语言】输出百分号“%”
  16. 利用Metasploit控制目标电脑(Win7_x64系统)
  17. Halide教程Part01:build、语法、调度、流水线
  18. ChibiOS如何建立自己的板级(board)配置
  19. 火车头采集器百度知道聚合采集插件说明文档!
  20. Python二十行代码实现hexo的md文件格式解析

热门文章

  1. loadrunner 录制 odbc 迭代出现lrd_db_option: ERROR, return-code=LRDE2009错误
  2. iPhone开发环境搭建For PC
  3. 【转】Photoshop网站设计:DesignStudio
  4. Lintcode 569解题思路及c++代码
  5. 浅析Codewarrior、IAR和Keil MDK三大开发环境优缺点
  6. SyntaxHighlighter Evolved高亮插件的编程语言及语言别名对照表
  7. 五本必读的深度学习圣经书籍,入门 AI 从 深度学习 开始
  8. 关于浏览器和浏览器内核的解释
  9. vc6.0报delete and rebuild Error executing link.exe.错误
  10. nitrous.io mysql_云IDE:Nitrous.io的介绍以及活用手段