题记:
文章内容输出来源:拉勾教育Java高薪训练营。
本篇文章是 Redis 学习课程中的一部分笔记。
Redis持久化
为什么要持久化?
Redis是内存数据库,宕机后数据会消失。
Redis重启后快速恢复数据,要提供持久化机制
Redis有两种持久化方式:RDB和AOF
注意:Redis持久化不保证数据的完整性。
当Redis用作DB时,DB数据要完整,所以一定要有一个完整的数据源(文件、mysql)
在系统启动时,从这个完整的数据源中将数据load到Redis中
数据量较小,不易改变,比如:字典库
通过info命令可以查看关于持久化的信息
# Persistence loading:0
rdb_changes_since_last_save:1
rdb_bgsave_in_progress:0
rdb_last_save_time:1589363051
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:0
aof_enabled:1
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:0
aof_current_size:58
aof_base_size:0
aof_pending_rewrite:0
aof_buffer_length:0
aof_rewrite_buffer_length:0
aof_pending_bio_fsync:0
aof_delayed_fsync:0
一、RDB
RDB(Redis DataBase),是redis默认的存储方式,RDB方式是通过快照( snapshotting )完成的。
这一刻的数据,不关注过程
1、触发快照的方式
- 符合自定义配置的快照规则
- 执行save或者bgsave命令
- 执行flushall命令
- 执行主从复制操作 (第一次)
2、配置参数定期执行
在redis.conf中配置:save 多少秒内 数据变了多少
# 不使用RDB存储 不能主从
save ""
# 表示15分钟(900秒钟)内至少1个键被更改则进行快照。
save 900 1
# 表示5分钟(300秒)内至少10个键被更改则进行快照。
save 300 10
# 表示1分钟内至少10000个键被更改则进行快照。
save 60 10000
漏斗设计,提供性能
3、命令显式触发
在客户端输入bgsave命令。
127.0.0.1:6379> bgsave
Background saving started
4、RDB执行流程(原理)
- Redis父进程首先判断:当前是否在执行save,或bgsave/bgrewriteaof