RDB、AOF持久化

Redis Database(RDB)
断电或者宕机,那么内存数据库中的数据将会全部丢失。为了解决这个缺点,Redis提供了将内存数据持久化到硬盘,以及用持久化文件来恢复数据库数据的功能。Redis 支持两种形式的持久化,一种是RDB快照(snapshotting),另外一种是AOF(append-only-file)。

触发方式
image

在指定时间间隔将内存中的数据写入磁盘,也就是SNAPSHOTTING,恢复时直接将文件写入到内存中

步骤: Redis fork一个子进程来持久化,先将数据写入到临时文件中。待持久化过程结束了,再用这个临时文件替换上次持久化好的RDB文件。整个过程主进程是不进行任何IO操作的,确保了极高的性能。如果进行大规模数据恢复,且对数据恢复的完整性不是非常敏感,那RDB比AOF更加高效。RDB缺点是最后一次持久化的数据可能会丢失。

存储文件:

The filename where to dump the DB

dbfilename dump.rdb # 生产环境一般会进行额外备份

默认策略

save 900 1
save 300 10
save 60 10000
恢复RDB文件,放到redis启动目录就好了,会自动检测dump.rdb文件

127.0.0.1:6379> config get dir
1) "dir"
2) "/usr/local/var/db/redis"
cp dump1.rdb dump.rdb
redis-server /usr/local/etc/redis.conf --daemonize yes
dump.rdb
(ENV) ☁ redis redis-cli
127.0.0.1:6379> keys *
1) "key2"
2) "key4"
3) "key3"
4) "key5"
5) "key1"
优点:

适合大规模数据恢复
对数据完整性要求不高 缺点:
需要一定时间间隔操作,如果redis意外宕机了,最后一次修改的数据就没有了
fork进程的时候,会占用一定的内存空间
APPEND ONLY MODE
image

image

默认不开启,需要手动进行配置

appendfsync always

appendfsync everysec

appendfsync no

如果文件出错:

(ENV) ☁ redis redis-server /usr/local/etc/redis.conf
22781:C 15 Oct 2021 22:51:39.072 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
22781:C 15 Oct 2021 22:51:39.072 # Redis version=6.2.5, bits=64, commit=00000000, modified=0, pid=22781, just started
22781:C 15 Oct 2021 22:51:39.072 # Configuration loaded
22781:M 15 Oct 2021 22:51:39.073 Increased maximum number of open files to 10032 (it was originally set to 256).
22781:M 15 Oct 2021 22:51:39.073
monotonic clock: POSIX clockgettime..-__ ''-._ _.-` . `_. ''-._ Redis 6.2.5 (00000000/0) 64 bit .-` .-`. \/ ., ''-._
( ' , .- | , ) Running in standalone mode
|-._-...- __...-.MARKDOWN_HASH03e3ff8a561e5bf969b7404f553cedd1MARKDOWNHASH .-'| Port: 6379
| MARKDOWN_HASHaae926b3a25f971333c83dba766cfa9cMARKDOWNHASH. / _.-' | PID: 22781MARKDOWN_HASHa423258d47e2c251989f3f9996ca7731MARKDOWNHASH-. -./ _.-' _.-' |-._-._-..-' .-'.-'|
| MARKDOWN_HASH096aca4c4d9ff508d06757325c853259MARKDOWNHASH-. .-'.-' | https://redis.ioMARKDOWN_HASHa423258d47e2c251989f3f9996ca7731MARKDOWNHASH-.`-.
.-'.-' .-'
|MARKDOWN_HASH096aca4c4d9ff508d06757325c853259MARKDOWNHASH-. -.__.-' _.-'_.-'| | -._-._ _.-'_.-' | -._ -._-..-'.-' .-'-._ -..-' .-'
`-.
_.-'
`-.__.-'

22781:M 15 Oct 2021 22:51:39.075 # Server initialized
22781:M 15 Oct 2021 22:51:39.075 # Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check-aof --fix

(ENV) ☁ bin ls|grep redis
redis-benchmark
redis-check-aof
redis-check-rdb
redis-cli
redis-sentinel
redis-server

文件修复

(ENV) ☁ bin redis-check-aof /usr/local/var/db/redis/appendonly.aof --fix
Invalid argument: /usr/local/var/db/redis/appendonly.aof
(ENV) ☁ bin redis-check-aof /usr/local/var/db/redis/appendonly.aof --fix
(ENV) ☁ bin redis-check-aof --fix /usr/local/var/db/redis/appendonly.aof
0x 8a: Expected prefix '*', got: '6'
AOF analyzed: size=143, ok_up_to=138, ok_up_to_line=27, diff=5
This will shrink the AOF from 143 bytes, with 5 bytes, to 138 bytes
Continue? [y/N]: y
Successfully truncated AOF
image

如果文件太大,fork一个新的进程进行重写

优点缺点 优点:

每次修改都同步,文件完整性更好!
最多丢失1s的数据
从不同步,效率更高
缺点:

aof数据文件远远大雨rdb文件,修复速度相对于rdb也慢很多
image image

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值