redis数据持久化RDBAOF_万金油_新浪博客

• 全称 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 慢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

运维螺丝钉

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

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

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

打赏作者

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

抵扣说明:

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

余额充值