Redis持久化

Redis有2种持久化策略: RDB和AOF。

RDB(Redis Data Base)

RDB是Redis默认的持久化策略,这种策略是把数据库的快照以二进制形式的副本保存在磁盘上。

  • RDB持久化触发条件

    • SAVE命令: 当客户端执行SAVE命令时,会阻塞Redis主线程进行数据持久化,直到持久化完成。Redis在阻塞期间不能处理客户端的请求。
    • BGSAVE命令: 当客户端执行BGSAVE命令时,Redis会fork一个子进程进行数据持久化,因此并不会阻塞Redis服务。
    • FLUSHALL命令: 当客户端执行FLUSHALL命令时,会清空Redis所有数据库的数据,并且也会触发数据同步。
    • save配置: Redis会按照配置文件中的save配置的条件进行数据同步,一旦满足条件,就会执行BGSAVE命令,即fork一个子进程进行同步。
    • shutdown: 当Redis服务关闭时,也会将数据同步到磁盘,以便下次启动时恢复。

redis根据配置自己尝试去生成rdb快照文件
  fork一个子进程出来
  子进程尝试将数据dump到临时的rdb快照文件中
  完成rdb快照文件的生成之后,就替换之前的旧的快照文件
dump.rdb,每次生成一个新的快照,都会覆盖之前的老快照

RDB优缺点

  • RDB的优点:

    • 文件体积小,恢复大数据较快
    • 最大化Redis性能: Redis会fork出子进程进行数据同步,并不影响Redis的性能。
  • RDB的缺点:
    • 数据安全性较低: 如果不显示的执行SAVE命令,那么Redis隔一段时间才会同步数据,可能会造成一定程度的数据丢失。

修改配置文件

save 900 1  #在900秒内,key值发生变化次数超过1次则进行持久化,生产环境通常默认这个值即可
save 300 10  #在300秒内,key值发生变化次数超过10次则进行持久化,生产环境通常默认这个值即可
save 60 10000  #在60秒内,key值发生变化次数超过10000次则进行持久化,生产环境通常默认这个值即可
stop-write-on-bgsave-error yes  #rdb文件在导出过程中出错了的话,Redis将停止写入数据,避免数据不一致
rdbcompression yes  #压缩数据
rdbchecksum yes  #检查rdb文件的完整性
dbfilename dump.rdb  #rdb文件名
dir /var/lib/redis/ #rdb文件保存路径

当设置完后重启Redis服务,然后在工作中只要达到了save条件,就会调用BGSAVE进行RDB持久化。并且日志中也会有“xx changes in xx seconds. Saving”这样的记录。如果要关闭rdb功能的话将save选项改为save “”,引号里为空即可

AOF(Append Only File)

AOF策略是把已经执行过的命令以文本的方式追加到AOF文件的末尾,以此达到记录数据库状态的目的。 AOF默认情况下是关闭的,当配置选项 appendonly 设置为yes后才会进行AOF的持久化。

appendfsync指定了AOF的同步策略,它有三个可选值。

  1. no: no代表Redis不亲自持久化,而是通过系统调用write函数每隔一段时间将数据写入文件。 这种情况下如果服务器发生故障,可能会有数据还没来得及同步就丢失了。
  2. always: always表示Redis每次执行写操作都会将数据同步到文件中。 这种策略虽然保证了数据的安全性,但是对Redis的性能会有影响。
  3. everysec: everysec是AOF默认的持久化策略,这种策略下, 系统每一秒都会将数据写入文件,兼顾了性能和数据安全性。

AOF优缺点

  • AOF优点:

    • 数据安全性较高,秒级丢失
  • AOF缺点:
    • 文件体积大,恢复大数据较慢

修改配置文件

appendonly yes  #打开aof功能
#appendfsync  no  #让系统自己决定什么时候进行持久化
#appendfsync always  #每次有命令发生都写入到磁盘
appendfsync  everysec  #每秒写一次数据到磁盘,比如折中的办法,推荐
no-appendfsync-on-rewrite  yes  #如果正在导出rdb数据,停止aof的写入(aof将保存在一个队列中,rdb备份完成后执行队列,不会丢失数据)
auto-aof-rewrite-percentage 100  #aof文件体积与上次相比增长率达到100%就进行重写(重写相当于记总账,比如对同一个key做了100次操作,我们只需要最后一次的操作,重写就会把多余的操作给忽略掉)
auto-aof-rewrite-min-size 64m  #和上一项组合使用,aof文件达到64M时进行重写(重写会节省掉空间,因为多余的操作被删除了)
appendfilename  "appendonly.aof"  #aof文件名
dir /data/redis6379

如何选择持久化策略?

两种持久化方式各有优缺点,可以选择混合的方式进行备份。 **混合持久化后,文件的内容大部分都是RDB格式的,恢复起来较快, 以AOF的方式同步也能保证数据的安全性。**综合使用AOF和RDB两种持久化机制,用AOF来保证数据不丢失,作为数据恢复的第一选择; 用RDB来做不同程度的冷备,在AOF文件都丢失或损坏不可用的时候,还可以使用RDB来进行快速的数据恢复

注意:

1、持久化不能取代备份,最好周期性的进行备份,过程如下

bgsave #在Redis客户端执行该命令后会在Redis所在目录创建dump.rdb文件,将该文件保存好,需要恢复数据的时候将dump.rdb移动到Redis所在目录后启动服务

2、当Redis服务启动进行数据恢复时,如果rdb和aof文件都存在,会优先使用aof文件来恢复数据(因为aof即时性高于rdb)

参考

https://blog.csdn.net/u012943767/article/details/79964514

【带你重拾Redis】Redis持久化相关推荐

  1. 【带你重拾Redis】Redis常见知识点

    什么是Redis? Redis是一个使用ANSI C语言编写,遵守BSD协议规范的开源的K-V类型的NoSQL数据库服务器. Redis是当前最流行的K-V类型的NoSQL数据库之一,在通往系统架构的 ...

  2. 【带你重拾Redis】Redis 主从架构

    Redis 主从架构 单机的 Redis,能够承载的 QPS 大概就在上万到几万不等.对于缓存来说,一般都是用来支撑读高并发的.因此架构做成主从(master-slave)架构,一主多从,主负责写,并 ...

  3. 【带你重拾Redis】Redis 哨兵集群实现高可用

    Redis 哨兵集群实现高可用 哨兵的介绍 sentinel,中文名是哨兵.哨兵是 Redis 集群架构中非常重要的一个组件,主要有以下功能: 集群监控:负责监控 Redis master 和 sla ...

  4. 【带你重拾Redis】Redis数据结构及使用场景

    Redis数据结构 Redis有着非常丰富的数据结构,这些数据结构可以满足非常多的应用场景, 如果对这些数据结构有一个比较清晰的认知,使用Redis也会更加得心应手. Redis主要支持以下数据结构: ...

  5. 【带你重拾Redis】Redis过期策略 和 内存淘汰策略(key回收)

    过期策略 我们set key的时候,都可以给一个expire time,就是过期时间,指定这个key比如说只能存活1个小时,我们自己可以指定缓存到期就失效. 如果假设你设置一个一批key只能存活1个小 ...

  6. 【带你重拾Redis】Redis事务

    Redis事务 Redis的事务主要依赖于WATCH ,UNWATCH,MULTI , EXEC, DISCARD等命令. 其中 MULTI , EXEC , DISCARD 分别对应关系型数据库的 ...

  7. 万字大白话带你重拾计算机网络

    你是一台电脑,你的名字叫 A 很久很久之前,你不与任何其他电脑相连接,孤苦伶仃. 直到有一天,你希望与另一台电脑 B 建立通信,于是你们各开了一个网口,用一根网线连接了起来. 用一根网线连接起来怎么就 ...

  8. 万字大白话带你重拾JVM

    前言 如果在文中用词或者理解方面出现问题,欢迎指出.此文旨在提及而不深究,但会尽量效率地把知识点都抛出来 一.JVM的基本介绍 JVM 是 Java Virtual Machine 的缩写,它是一个虚 ...

  9. 【重难点】【Redis 02】Redis 的持久化、Redis 的主从复制和集群、哨兵

    [重难点][Redis 02]Redis 的持久化.Redis 的主从复制和集群.哨兵 文章目录 [重难点][Redis 02]Redis 的持久化.Redis 的主从复制和集群.哨兵 一.Redis ...

最新文章

  1. Bloomberg开源面向OCaml的JavaScript后端BuckleScript
  2. iOS 9应用开发教程之显示编辑文本标签文本框
  3. Python每日一练0018
  4. OSPF的高级配置(连载1)
  5. Django13-ModelForm中的is_valid及局部钩子、全局钩子源码解析
  6. tpcc mysql下载_tpcc-mysql 试用
  7. 【渝粤教育】电大中专沟通技巧答案作业 题库
  8. Exchange Server 2013日记功能
  9. amd显卡风扇调节_为什么NVIDIA和AMD公版显卡纷纷摒弃涡轮散热器而采用多风扇散热设计?...
  10. .NET基础编程之特性 - Attribute
  11. 全网最雕10名月薪超过5W的程序员,和他们的公众号!
  12. colspan会影响内部单元格宽度失效_冷轧轧辊失效原因分析及改进措施
  13. URL 编码是什么?
  14. 内存颗粒性能测试软件,PC技巧分享 篇四:如何通过快速识别内存颗粒了解超频性能...
  15. HTML5小游戏程序案例--冰桶挑战h5案例
  16. 计算机c盘中哪些东西能删除吗,电脑c盘哪些文件可以删除,教您c盘里哪些文件可以删除...
  17. macbook linux 双系统,mac安装linux双系统的吐槽
  18. 什么是敏捷开发Scrum
  19. 宏睿达认证计费管理系统(支持微信公众号)使用说明,爱快路由认证计费系统
  20. webpack之配置es6转换成es5

热门文章

  1. Nature子刊:遗传发育所白洋组发表高通量分离培养和鉴定根系细菌的方法
  2. PICRUSt2分析实战:16S扩增子OTU或ASV预测宏基因组EC、通路、KO(200806更新)
  3. PNAS:亚马逊雨林向农业的转变导致土壤细菌群落的生物均质化
  4. 湖南中医药大学计算机刘伟老师,喜讯 | 湖南中医药大学在全省高校教师课堂教学竞赛中喜获佳绩...
  5. pandas使用sum函数计算dataframe单数据列的加和或者对所有的数据列进行求和(sum column or all columns of dataframe)
  6. R语言plotly可视化:plotly可视化互相重叠的归一化直方图并在直方图中添加密度曲线kde、设置不同的直方图使用不同的分箱大小(bin size)、在直方图的边缘添加边缘轴须图
  7. Java程序 实验小全
  8. Fast and accurate short read alignment with Burrows-Wheeler transform
  9. 用python汇总pdf文件_Python处理PDF文件-简译与总结
  10. php 判断是不是前一天,PHP开发中,定时执行如何判断之前的脚本是否跑完?