redis数据持久化RDBAOF

本文深入探讨Redis的两种数据持久化方法:RDB快照和AOF日志。解析各自的配置、优缺点及应用场景,包括如何手动触发持久化、数据恢复流程及AOF文件的维护策略。

• 全称 Reids DataBase

– 数据持久化方式之一

– 在指定时间间隔内,将内存中的数据集快照写入硬盘。

– 术语叫 Snapshot 快照。

– 恢复时,将快照文件直接读到内存里。

 

 

[root@host53 ~]# cd /var/lib/redis/6379/

[root@host53 6379]# ls

dump.rdb

 

[root@host53 6379]# /etc/init.d/redis_6379  stop

Stopping ...

Redis stopped

[root@host53 6379]# rm -rf dump.rdb 

[root@host53 6379]# /etc/init.d/redis_6379  start

Starting Redis server...

[root@host53 6379]# ls

dump.rdb

[root@host53 6379]# redis-cli  -h 192.168.4.53 -p 6353

192.168.4.53:6353> keys *

1) "name"

2) "lover"

3) "age"

 

备份数据:

把51的数据备份,发送给52

[root@host51 6379]# mkdir   /redisbak 

[root@host51 6379]# cp  /var/lib/redis/6379/dump.rdb  /redisbak/

[root@host51 6379]# /etc/init.d/redis_6379  stop

[root@host51 6379]# scp /redisbak/dump.rdb  root@192.168.4.52:/var/lib/redis/6379/

 

52的数据跟新51的

[root@host2 6379]# /etc/init.d/redis_6379  stop

[root@host2 6379]# rm -rf dump.rdb 

[root@host2 6379]# ls

[root@host2 6379]# /etc/init.d/redis_6379  start

[root@host2 6379]# ls

dump.rdb

[root@host2 6379]# redis-cli -h 192.168.4.52 -p 6352

192.168.4.52:6352> keys *

1) "age"

2) "name"

3) "lover"

192.168.4.52:6352> 

 

 

redis服务关于RDB文件的配置

 254 dbfilename "dump.rdb"// 文件名

217 #   save ""    // 禁用 RDB

 

数据从内存保存到硬盘的频率

 

 218 

 219 save 900 1    // 900 秒内且有 1 次修改存盘

 220 save 300 10   //300 秒内且有 10 次修改存盘

 221 save 60 10000   //60 秒内且有 10000 修改存盘

 

 

如果没有停掉服务,就删除dump.rdb

[root@host51 6379]# ls

dump.rdb  dump.rdb.bak

[root@host51 6379]# rm -rf dump.rdb

[root@host51 6379]# ls

dump.rdb.bak

[root@host51 6379]# /etc/init.d/redis_6379  stop

Stopping ...

Redis stopped

[root@host51 6379]# ls

dump.rdb  dump.rdb.bak

##这跟数据从内存保存到硬盘的频率 有直接的关系 。不管时间到不到,都会把数据存进硬盘

 

RDB 优点 / 缺点

• RDB 优点

– 高性能的持久化实现, Redis 服务会创建一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件;整个过程中主进程不做任何 IO 操作,这就确保了极高的性能。

– 如果要进程大规模数据恢复,且对数据完整行要求不是非常高,使用 RDB 比 AOF 更高效。

• RDB 的缺点

– 意外宕机,最后一次持久化的数据会丢失

 

 

没有关闭服务就删除数据

192.168.4.51:6351> keys *

1) "name"

2) "age"

3) "lover"

192.168.4.51:6351> FLUSHALL

OK

192.168.4.51:6351> keys *

(empty list or set)

192.168.4.51:6351> quit

[root@host51 6379]# ls

dump.rdb  dump.rdb.bak

[root@host51 6379]# rm -rf dump.rdb

[root@host51 6379]# cp dump.rdb.bak  dump.rdb

[root@host51 6379]# ls

dump.rdb  dump.rdb.bak

[root@host51 6379]# /etc/init.d/redis_6379  stop

Stopping ...

Redis stopped

[root@host51 6379]# /etc/init.d/redis_6379  start

Starting Redis server...

[root@host51 6379]# redis-cli  -h 192.168.4.51 -p 6351 -a 123456

192.168.4.51:6351> keys *

(empty list or set)

 

 

• 手动立刻存盘

// 阻塞写存盘

– > save

– > bgsave // 不阻塞写存盘

 

数据存进硬盘把数据存进硬盘:

1.等待硬盘的存盘频率时间

2.save

3.bgsave

4.停止服务,就会自动存盘

 

• 压缩

– rdbcompression yes | no  //默认压缩

 

• 在存储快照后,使用 crc16 算法做数据校验

– rdbchecksum yes|no

 

• bgsave 出错停止写操作 , 对数据一致性要求不高设置为 no

– stop-writes-on-bgsave-error yes|no

 

 

 

 

AOF 介绍

• 只追加操作的文件

– Append Only File

– 记录 redis 服务所有写操作。

– 不断的将新的写操作,追加到文件的末尾。

– 使用 cat 命令可以查看文件内容

 

[root@host51 6379]# /etc/init.d/redis_6379  stop

[root@host51 6379]# vim /etc/redis/6379.conf 

[root@host51 6379]# /etc/init.d/redis_6379  start

673 appendonly yes

677 appendfilename "appendonly.aof"

702 # appendfsync always

 703 appendfsync everysec

 704 # appendfsync no

744 auto-aof-rewrite-percentage 100

 745 auto-aof-rewrite-min-size 64mb

 

:wq

 

[root@host51 6379]# /etc/init.d/redis_6379  start

[root@host51 6379]# ls

appendonly.aof  dump.rdb  dump.rdb.bak

[root@host51 6379]# cat appendonly.aof

 

[root@host51 6379]# redis-cli  -h 192.168.4.51 -p 6351

192.168.4.51:6351> keys *

(empty list or set)

192.168.4.51:6351> set king tang

OK

192.168.4.51:6351> set king ming

OK

192.168.4.51:6351> keys  *

 

[root@host51 6379]# cat appendonly.aof 

*2

$6

SELECT

$1

0

*3

$3

set

 

模拟数据丢失,恢复数据:

[root@host51 6379]# /etc/init.d/redis_6379  stop

[root@host51 6379]# ls

appendonly.aof  appendonly.aof.bak  dump.rdb  dump.rdb.bak

[root@host51 6379]# rm -rf appendonly.aof

[root@host51 6379]# ls

appendonly.aof.bak  dump.rdb  dump.rdb.bak

[root@host51 6379]# cp appendonly.aof.bak  appendonly.aof

[root@host51 6379]# /etc/init.d/redis_6379 start

[root@host51 6379]# redis-cli -h 192.168.4.51 -p 6351

192.168.4.51:6351> keys *

1) "king"

192.168.4.51:6351> 

 

修复有问题的AOF文件

[root@host51 6379]# /etc/init.d/redis_6379  stop

[root@host51 6379]# vim appendonly.aof

[root@host51 6379]# /etc/init.d/redis_6379  start

Starting Redis server...

[root@host51 6379]# /etc/init.d/redis_6379  status

Redis is not running

 

[root@host51 6379]# redis-check-aof  --fix appendonly.aof

0x              59: Expected prefix '*', got: 'j'

AOF analyzed: size=108, ok_up_to=89, diff=19

This will shrink the AOF from 108 bytes, with 19 bytes, to 89 bytes

Continue? [y/N]: y

Successfully truncated AOF

[root@host51 6379]# vim appendonly.aof

 

[root@host51 6379]# /etc/init.d/redis_6379  start

/var/run/redis_6379.pid exists, process is already running or crashed

[root@host51 6379]# rm -rf /var/run/redis_6379.pid exists

[root@host51 6379]# /etc/init.d/redis_6379  start

Starting Redis server...

[root@host51 6379]# /etc/init.d/redis_6379  status

Redis is running (5958)

[root@host51 6379]# ss -ntulp | grep redis

tcp    LISTEN     0      128    192.168.4.51:6351                  *:*                   users:(("redis-server",pid=5958,fd=6))

 

• AOF 文件记录,写操作的三种方式

– appendfsync always // 有新的写操作立即记录,

性能差,完整性好。但是系统开销比较大

– appendfsync everysec // 每秒记录一次,宕机时会   (默认)

丢失 1 秒的数据

– appendfsync no

// 从不记录

 

• 日志重写 ( 日志文件会不断增大 ) ,何时会触发日志重写?

 

– redis 会记录上次重写时 AOF 文件的大小,默认配置

是当 aof 文件是上次 rewrite 后大小的 1 倍且文件大于

64M 时触发。

– auto-aof-rewrite-percentage 100

– auto-aof-rewrite-min-size 64mb

-必须两个条件都要成立,才可以进行日志重写

 

AOF 优点 / 缺点

• RDB 优点

– 可以灵活的设置同步持久化 appendfsync alwayls 或异步持久化 appendfsync verysec

– 宕机时,仅可能丢失 1 秒的数据

 

• RDB 的缺点

– AOF 文件的体积通常会大于 RDB 文件的体积。执行 fsync 策略时的速度可能会比 RDB 慢。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维螺丝钉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值