RedisDataBase(RDB)
数据持久化方式之一
数据持久化默认方式
按照指定时间间隔,将内存中的数据集快照写入硬盘
通过RDB进行备份还原,只要拷贝RBD文件即可
数据从内存保存到磁盘的频率设置
save 900 1 //15分钟内有1个key改变即存盘
save 300 10 //5分钟内有10个key改变即存盘
save 60 10000 //1分钟内有10000个key改变即存盘
- 也可以进行手动存盘
save //阻塞写存盘
bgsave //不阻塞写存盘
RDB的优缺点
-
优点:
- 高性能的持久化实现:创建一个子进程来执行持久化,先将数据写入临时文件,持久化过程结束后,再用这个临时文件替换上次持久化好的文件
- 过程中主进程不做任何IO操作
- 比较适合大规模数据恢复,且对数据完整性要求不是非常高的场合
-
缺点:
- 意外宕机时,丢失最后一次持久化的所有数据
配置RDB
- 配置RDB参数
# [root@redis7 ~]# vim /etc/redis/6379.conf
dbfilename dump.rdb
save 900 1
save 120 10
save 60 10000
- 清空rbd数据
# 停止redis服务
[root@redis7 ~]# service redis_6379 stop
Stopping ...
Redis stopped
# 删除数据
[root@redis7 ~]# rm -rf /var/lib/redis/6379/*
# 启动服务
[root@redis7 ~]# service redis_6379 start
Starting Redis server...
# 查看数据文件,因为没有存储过任何数据,所以不存在RBD文件
[root@redis7 ~]# ls /var/lib/redis/6379/
- 存储数据
# 120秒内添加10个数据
[root@redis7 ~]# redis-cli
127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3 k4 v4 k5 v5
OK
127.0.0.1:6379> MSET k6 v6 k7 v7 k8 v8 k9 v9 k10 v10
OK
127.0.0.1:6379> KEYS *
1) "k10"
2) "k2"
3) "k3"
4) "k9"
5) "k8"
6) "k4"
7) "k5"
8) "k7"
9) "k6"
10) "k1"
127.0.0.1:6379> exit
[root@redis7 ~]# ls /var/lib/redis/6379/
dump.rdb
- 验证备份还原
# 备份数据文件
[root@redis7 ~]# cp /var/lib/redis/6379/dump.rdb ~/
# 模拟误删除数据
[root@redis7 ~]# redis-cli
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379> exit
# 恢复数据
[root@redis7 ~]# service redis_6379 stop
Stopping ...
Redis stopped
[root@redis7 ~]# cp dump.rdb /var/lib/redis/6379/ # 用备份文件覆盖目标文件
cp: overwrite ‘/var/lib/redis/6379/dump.rdb’? y
# 启动服务并验证
[root@redis7 ~]# service redis_6379 start
Starting Redis server...
[root@redis7 ~]# redis-cli
127.0.0.1:6379> KEYS *
1) "k6"
2) "k3"
3) "k4"
4) "k1"
5) "k8"
6) "k7"
7) "k9"
8) "k5"
9) "k10"
10) "k2"
Append Only File(AOF)
- 追加方式记录写操作的文件
- 记录redis服务所有写操作
- 不断的将新的写操作,追加到文件的末尾
- 默认没有启用
- 使用cat命令可以查看文件内容
AOF文件记录写操作的方式
- appendfsync always:时时记录,并完成磁盘同步
- appendfsync everysec :每秒记录一次,并完成磁盘同步
- appendfsync no:写入aof ,不执行磁盘同步
AOF优点与缺点
-
优点:
- 可以灵活设置持久化方式
- 出现意外宕机时,仅可能丢失1秒的数据
-
缺点:
- 持久化文件的体积通常会大于RDB方式
- 执行fsync策略时的速度可能会比RDB方式慢
配置AOF
- 修改配置文件
[root@redis7 ~]# redis-cli
127.0.0.1:6379> CONFIG SET appendonly yes
OK
127.0.0.1:6379> CONFIG REWRITE
OK
127.0.0.1:6379> SAVE
OK
127.0.0.1:6379> exit
# 查看AOF文件
[root@redis7 ~]# ls /var/lib/redis/6379/
appendonly.aof dump.rdb
- 验证备份还原
# 备份AOF文件
[root@redis7 ~]# cp /var/lib/redis/6379/appendonly.aof ~/
# 删除数据
[root@redis7 ~]# redis-cli
127.0.0.1:6379> KEYS *
1) "k6"
2) "k3"
3) "k4"
4) "k1"
5) "k8"
6) "k7"
7) "k9"
8) "k5"
9) "k10"
10) "k2"
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379> exit
# 恢复数据
[root@redis7 ~]# service redis_6379 stop
Stopping ...
Redis stopped
[root@redis7 ~]# rm -rf /var/lib/redis/6379/*
[root@redis7 ~]# cp appendonly.aof /var/lib/redis/6379/
# 启动服务并验证
[root@redis7 ~]# service redis_6379 start
Starting Redis server...
[root@redis7 ~]# redis-cli
127.0.0.1:6379> KEYS *
1) "k10"
2) "k3"
3) "k2"
4) "k9"
5) "k1"
6) "k6"
7) "k5"
8) "k8"
9) "k7"
10) "k4"