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