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生成过程中,会创建内存的副本,并在副本上执行操作)进行数据写入,父进程继续为客户端提供读写服务。

相关推荐
Amarantine、沐风倩✨27 分钟前
设计一个监控摄像头物联网IOT(webRTC、音视频、文件存储)
java·物联网·音视频·webrtc·html5·视频编解码·七牛云存储
古木201928 分钟前
前端面试宝典
前端·面试·职场和发展
路在脚下@1 小时前
spring boot的配置文件属性注入到类的静态属性
java·spring boot·sql
啦啦右一1 小时前
Spring Boot | (一)Spring开发环境构建
spring boot·后端·spring
森屿Serien1 小时前
Spring Boot常用注解
java·spring boot·后端
苹果醋33 小时前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
Hello.Reader3 小时前
深入解析 Apache APISIX
java·apache
盛派网络小助手3 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
菠萝蚊鸭3 小时前
Dhatim FastExcel 读写 Excel 文件
java·excel·fastexcel
旭东怪4 小时前
EasyPoi 使用$fe:模板语法生成Word动态行
java·前端·word