redis的持久化使用

来自文章集合:一文带你搞懂redis使用过程(持续更新中)

redis如何使用持久化?

redis通过RDB和AOF来实现数据的持久化。RDB做镜像全量持久化,AOF做增量持久化。

什么是RDB?

RDB是一种快照持久化文件,它定期将redis数据的快照保存到磁盘的二进制文件中,这个快照包含redis某个时间点的完整状态,包括所有key、值和数据结构。RDB是一个紧凑的二进制文件,很适合用来进行数据备份和恢复。

RDB优缺点

优点:

  • 高性能,RDB需要定期进行备份,不需要每次写操作进行磁盘写入
  • 适用于灾难恢复:RDB文件对灾难恢复十分有用,因为他可以快速恢复到某个时间点的完整状态

缺点:

  • 可能会造成数据丢失;RDB是周期性进行备份更新,如果redis在生成快照(备份)之间崩溃,会丢失最后一次快照之后的所有写操作
  • 不适合实时备份;RDB生成快照的期间,会导致redis某个瞬间性能下降、阻塞
  • 不具有可读性;RDB生成二进制文件,不容易查看和分析

RDB使用

redis文件夹面有一个redis.windows.conf文件,在里面可搜索到下面相关配置,根据自身需求,可进行rdb配置的修改。

bash 复制代码
#   启动rdb持久化
save 900 1  # 900秒内,如果至少有一个键被修改,则执行快照
save 300 10 # 在300秒内,如果至少有10个键被修改,则执行快照
save 60 10000   # 在60秒内,如果至少有10000个键被修改,则执行快照

什么是AOF?

AOF是一种追加日志方式的持久化文件,每次写操作都会追加aof文件的末尾,以记录操作的顺序和详细信息。当redis重启时,会重新执行aof文件中的写操作,来恢复redis数据

AOF的优缺点

优点:

  • 数据安全:aof持久化 记录 每次写操作的顺序和详细信息,减少数据丢失的风险
  • 实时备份:aof持久化可以每次写操作都记录操作,这意味着数据可以近乎于实时的存到磁盘,适用于实时备份
  • 可读性:AOF文件 是一个文本文件,容易查看和分析

缺点:

  • 性能问题,aof持久化需要记录每一个写操作,在高写入负债下,性能回下降
  • 文件体积:AOF文件一般比RDB文件大,因为AOF持久化文件包含每个写操作的详细信息
  • 恢复时间:AOF文件在恢复时可能比RDB操作要慢,因为它需要执行每一个写操作

AOF的使用

redis文件夹面有一个redis.windows.conf文件,在里面可搜索到下面相关配置,根据自身需求,可进行aof配置的修改。

bash 复制代码
appendonly yes  #  开启AOF,默认为关闭
appendfilename "appendonly.aof"	# 指定aof文件的名称

#	下面aof记录写操作的频率三个设置

#   默认,每次写操作都进行磁盘写入,高写入频率会影响性能,因为是同步操作
appendfsync always	

#   每秒将累计的写操作进行磁盘写入
appendfsync everysec

#   不执行显式的同步操作。而是依赖操作系统来决定何时将数据刷写到AOF文件。这是性能最高的选项,因为Redis不需要等待同步操作完成。但也是最不安全的选项,因为操作系统可能在Redis认为数据已经持久化时丢失数据。
appendfsync no


#	配置AOF重写
auto-aof-rewrite-percentage 100 #   设置aof文件大小达到原始aof文件大小的100%触发重写
auto-aof-rewrite-min-size 64mb  #设置最小的aof文件大小为64mb

总结

因为RDB数据备份之间会消耗较长时间,不够实时,在停机的时候可能会导致大量数据丢失,所以需要AOF来配置使用。在redis重启时,会使用RDB文件重新构建内存,将redis恢复到最近时间点的状态,在使用AOF文件重新执行写操作来将数据恢复到服务器停机前的状态。

引申

如果机器突然断电会怎么样?

这种情况下取决于AOF的sync设置,如果是always,每次写操作都会执行磁盘写入,那么就不会丢失数据,如果设置eveysec,1秒同步一次,那么最高只会丢失一秒数据。


RDB的原理是什么,是如何备份的?

Redis在生成RDB文件时会使用类似于UNIX的fork系统调用来创建一个子进程。这个子进程是父进程的复制,包括内存中的数据。因此,在生成RDB文件之前,子进程和父进程的数据是一致的 子进程使用copy on write(写时复制的技术:子进程开始RDB生成过程中,会创建内存的副本,并在副本上执行操作)进行数据写入,父进程继续为客户端提供读写服务。

相关推荐
独行soc1 分钟前
#渗透测试#SRC漏洞挖掘#深入挖掘XSS漏洞02之测试流程
web安全·面试·渗透测试·xss·漏洞挖掘·1024程序员节
暗黑起源喵3 分钟前
设计模式-工厂设计模式
java·开发语言·设计模式
WaaTong8 分钟前
Java反射
java·开发语言·反射
理想不理想v15 分钟前
‌Vue 3相比Vue 2的主要改进‌?
前端·javascript·vue.js·面试
齐 飞32 分钟前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb
九圣残炎41 分钟前
【从零开始的LeetCode-算法】1456. 定长子串中元音的最大数目
java·算法·leetcode
wclass-zhengge43 分钟前
Netty篇(入门编程)
java·linux·服务器
LunarCod1 小时前
WorkFlow源码剖析——Communicator之TCPServer(中)
后端·workflow·c/c++·网络框架·源码剖析·高性能高并发
Re.不晚1 小时前
Java入门15——抽象类
java·开发语言·学习·算法·intellij-idea
雷神乐乐1 小时前
Maven学习——创建Maven的Java和Web工程,并运行在Tomcat上
java·maven