当前位置:网站首页>面试官:你说你精通Redis,你看过持久化的配置吗?
面试官:你说你精通Redis,你看过持久化的配置吗?
2022-06-24 19:28:00 【InfoQ】
RedisRedisRedisSNAPSHOTTINGRDBAPPEND ONLY MODERDB
RDBRedis DataBaseRedissnapshotdump.rdb
SNAPSHOTTING配置文件
save
<seconds> <changes>
Redissave 900 1 //900s内有1个更改
save 300 10 //300s内有10个更改
save 60 10000 //60s内有10000次更改
RDBsave "" stop-writes-on-bgsave-error yes
bgsaveRedis- 如果为
yes,则当硬盘出现问题时,Redis将停止接受写入操作,这样我们可以及时发现,避免数据的大量丢失;
- 如果为
no,则Redis无视bgsave的错误继续执行写命令。
RedisRedisRedisrdbcompression yes
RedisLZFyesCPUrdbchecksum yes
RDB5CRC64CRC64RDB10%RDBdbfilename dump.rdb
saveflushallshutdowndump.rdbdir ./
理论
工作方式
- 当
Redis需要保存dump.rdb文件时,它会调用系统函数fork(),创建一个子进程(与主进程完全一致);
- 子进程将数据集写入临时文件
RDB中;
- 当子进程完成对新
RDB文件的写入时,Redis用新RDB文件替换原来的RDB文件,并删除旧的RDB文件。
Rediscopy-on-write如何触发RDB快照
- 配置文件中默认的快照配置;
- 命令
save(阻塞, 只管保存快照,其他的等待)或者是bgsave(异步)命令,快照同时还可以响应客户端命令;
- 执行
flushall命令,清空数据库所有数据,意义不大;
- 执行
shutdown命令,保证服务器正常关闭且不丢失任何数据,意义也不大。
通过RDB文件恢复数据
dump.rdbdump.rdbredisbinredis优点
RDB是一个非常紧凑的文件,非常适用于数据集的备份;
RDB是一个紧凑的单一文件,很方便传送到另一个远端数据中心或者亚马逊的S3(可能加密),非常适用于灾难恢复;
Redis的主进程不进行I/O操作,确保了极高的性能;
- 适合大规模数据的恢复,对于数据的完整性和一致性要求不高的话,
RDB比AOF方式更加高效。
缺点
- 在
Redis意外宕机时,你可能会丢失几分钟的数据;
RDB需要经常fork子进程来保存数据集到硬盘上,当数据集比较大的时候,fork的过程是非常耗时的,可能会导致Redis在一些毫秒级内不能响应客户端的请求。如果数据集巨大并且CPU性能不是很好的情况下,这种情况会持续1秒;AOF也需要fork,但是可以调节重写日志文件的频率来提高数据集的耐久度。
AOF
RDB1.1RedisdurableAOFAOFAppend Only FileAOFAPPEND ONLY MODE配置文件
appendonly no
yesAOFRDBappendfilename "appendonly.aof"
dump.rdbappendfsync
fsync()Redisappendfsync always //每次发生数据变更会被立即记录到磁盘,性能较差但数据完整性比较好
appendfsync everysec //默认推荐,异步操作,每秒记录,如果宕机,有1秒内数据丢失
appendfsync no //不同步,只有在操作系统需要时在刷新数据
重写
AOFAOFAOFrebuildbgrewriteaofAOFRedis 2.2Redis 2.4Redis执行系统函数fork(),创建一个子进程(与主进程完全一致);
- 子进程开始将新
AOF文件的内容写入到临时文件;
- 对于所有新执行的写入命令,父进程一边将它们累积到一个内存缓存中,一边将这些改动追加到现有
AOF文件的末尾,这样即使在重写的中途发生停机,现有的AOF文件也是安全的;
- 当子进程完成重写工作时,它给父进程发送一个信号,父进程在接收到信号之后,将内存缓存中的所有数据追加到新
AOF文件的末尾。
Redis原子地用新文件替换旧文件,之后所有命令都会直接追加到新AOF文件的末尾。
no-appendfsync-on-rewrite no
aofno-appendfsync-on-rewrite- 如果该参数设置为
no,是最安全的方式,不会丢失数据,但是要忍受阻塞的问题;
- 如果设置为
yes,这就相当于将appendfsync设置为no,这说明并没有执行磁盘操作,只是写入了缓冲区。因此这样并不会造成阻塞(因为没有竞争磁盘),但是如果这个时候redis挂掉,就会丢失数据。丢失多少数据呢?在linux的操作系统的默认设置下,最多会丢失30s的数据。
yesnoauto-aof-rewrite-percentage 100
aofauto-aof-rewrite-min-size 64mb
auto-aof-rewrite-min-sizeauto-aof-rewrite-percentageRedisAOFAOFrewrite64M3Gaof-load-truncated yes
AOFAOFRedisAOF- yes:加载一个截断的
AOF,Redis服务器开始发出日志,通知用户该事件;
- no:服务器将中止并出现错误,拒绝启动。
AOFAOF- 为现有的
AOF文件创建一个备份;
- 使用
Redis附带的redis-check-aof命令,对原来的AOF文件进行修复;
redis-check-aof –fix
redis-check-aof --fix appendonly.aof修复命令,杀光不符合规范的语法
- (可选)使用
diff -u对比修复后的AOF文件和原始AOF文件的备份,查看两个文件之间的不同之处;
- 重启
Redis服务器,等待服务器载入修复后的AOF文件,并进行数据恢复。
aof-use-rdb-preamble yes
AOFRedisAOFRDBAOFRDB fileAOF tailRedisAOFRDBAOF理论
优点
- 数据的完整性和一致性更高,
AOF的持久化通过使用不同的策略,最多丢失1秒的数据;
AOF文件是一个只进行追加的日志文件,不需要写入seek;
Redis可以在AOF文件体积变得过大时,自动地在后台对AOF进行重写,重写操作是绝对安全的;
AOF文件记录的写入操作以Redis协议的格式保存,容易读懂,容易对文件进行分析;
缺点
- 对于相同的数据集来说,
AOF文件的体积通常要大于RDB文件的体积;
- 根据所使用的
fsync策略,AOF的速度可能会慢于RDB。
fsyncfsyncAOFRDBRDBlatency对比与总结
如何选择使用哪种持久化方式?
PostgreSQLRDBAOFAOFRDBsnapshotRDBAOFAOF和RDB之间的相互作用
2.4RedisBGSAVEBGREWRITEAOFBGREWRITEAOFBGSAVERedis I/OBGSAVEBGREWRITEAOFOKBGREWRITEAOFBGSAVEBGREWRITEAOF RedisRDBAOFAOFAOF 备份redis数据
- 创建一个定期任务(
cron job),每小时将一个RDB文件备份到一个文件夹,并且每天将一个RDB文件备份到另一个文件夹;
- 确保快照的备份都带有相应的日期和时间信息,每次执行定期任务脚本时,使用
find命令来删除过期的快照;
- 至少每天一次,将
RDB备份到你的数据中心之外,或者至少是备份到你运行Redis服务器的物理机器之外。
性能建议
RDBslaveRDBsave 900 1AOFloadAOFIOAOF rewrite rewriteAOF rewriteAOF64M5GAOFMaster-Slave ReplicationIOrewriteMaster/Slave Master/SlaveRDB边栏推荐
- Analysis of BBR congestion control state machine
- 使用Adb连接设备时提示设备无权限
- [product design and R & D collaboration tool] Shanghai daoning provides you with blue lake introduction, download, trial and tutorial
- 推荐模型之多任务模型:ESMM、MMOE
- 煮茶论英雄!福建省发改委、市营商办领导一行莅临育润大健康事业部交流指导
- 双链表实现
- Tdengine can read and write through dataX
- Call process of package receiving function
- leetcode:1504. 统计全 1 子矩形的个数
- Functional analysis of ebpf tracepoint
猜你喜欢

Intelligent fish tank control system based on STM32 under Internet of things

最大流问题

Remove the screen recording reminder (seven cattle cloud demo)

如何做到全彩户外LED显示屏节能环保

一文理解OpenStack网络

2022 international women engineers' Day: Dyson design award shows women's design strength

去掉录屏提醒(七牛云demo)

【Camera基础(二)】摄像头驱动原理和开发&&V4L2子系统驱动架构

Multi view function in blender

Analysis of BBR congestion control state machine
随机推荐
Static routing experiment
[product design and R & D collaboration tool] Shanghai daoning provides you with blue lake introduction, download, trial and tutorial
福建省发改委福州市营商办莅临育润大健康事业部指导视察工作
Why are life science enterprises on the cloud in succession?
自己总结的wireshark抓包技巧
STL+树
Network layer & IP
BBR bandwidth per second conversion logic
Tdengine can read and write through dataX
煮茶论英雄!福建省发改委、市营商办领导一行莅临育润大健康事业部交流指导
栈的两种实现方式
Make tea and talk about heroes! Leaders of Fujian Provincial Development and Reform Commission and Fujian municipal business office visited Yurun Health Division for exchange and guidance
The most important thing at present
PKI notes
leetcode_191_2021-10-15
TypeScript快速入门
socket done
Understanding openstack network
CondaValueError: The target prefix is the base prefix. Aborting.
TKKC round#3