Redis 学习笔记Redis持久化
Posted Adorable_Rocy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 学习笔记Redis持久化相关的知识,希望对你有一定的参考价值。
前言:默认情况下,Redis将数据库快照保存在名字为dump.rdb的二进制文件中
1.RDB(Redis Database)
1.修改规则(60s发生3次变动储存一次)
- 测试
[root@localhost bin]# redis-cli -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set k3 v3
OK
127.0.0.1:6379> shutdown
not connected>
- dump.rdb文件生成
[root@localhost bin] ls
dump.rdb redis-check-aof redis-cli redis-server
redis-benchmark redis-check-rdb redis-sentinel xconfig
[root@localhost bin] cat dump.rdb
REDIS0009 redis-ver6.2.1
redis-bitseÉjused-mem¸O
𮤭preamble~v2k5v5k4v4k3v3k1v1þe
ÿ9Ӊ
2. 宕机也会生成rdb文件
#删除dump.rdb文件
[root@localhost bin]# rm -rf dump.rdb
[root@localhost bin]# ls
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server xconfig
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> shutdown
not connected>
[root@localhost bin]# ls
dump.rdb redis-check-aof redis-cli redis-server
redis-benchmark redis-check-rdb redis-sentinel xconfig
- save的规则满足的情况下,会自动触发rdb规则
- 执行flushall命令,也会触发我们的rdb规则
- 退出redis,也会产生rdb文件
3. 恢复RDB文件
- 只需要将rdb文件放在redis启动目录就可以,redis启动的时候会自动检查dump.rdb恢复其中的数据
- 查看需要存放的位置【command】
127.0.0.1:6379> config get dir
1) "dir"
2) "/usr/local/bin" # 如果这个目录下存在dump.rdb文件,启动就会自动恢复其中的数据
RDB保存工作流程
- Redis 调用forks. 同时拥有父进程和子进程。并且子父进程共享内存
- 子进程将数据集写入到一个临时 RDB 文件中
- 当子进程完成对新 RDB 文件的写入时,Redis 用新 RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件
RDB优缺点:
-
优点
- rdb是一个紧凑的文件,适合大规模的数据恢复
- rdb恢复大数据集时比aof要快
- rdb通过fork一个子进程来工作,而父进程不需要做任何IO操作,最大化redis的性能
-
缺点
- 需要一定的时间间隔进行操作。如果在不满足时间间隔的条件下,redis意外宕机,那么在最后一次进行持久化之后的数据都消失了
- fork进程的时候,当数据集比较大的时候,fork的过程会非常耗时
2.AOF(Append Only File)
2.1AOF是什么?
文件名为:
功能:类似于历史记录,将所有的记录(命令)记录下来
2.2工作流程
- aof是以日志的形式记录每个操作,将Redis执行过的所有指令记录下来(读操作不记录),只许追加文件但不可改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复
2.3 手动开启AOF
默认是no,这里我们修改为yes
2.4 使用aof储存
# 重启redis
[root@localhost bin]# redis-server fatcats/redis.conf
[root@localhost bin]# redis-cli -p 6379
127.0.0.1:6379> ping
PONG
# 设置三个数据
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set k3 v3
OK
2.5 AOF文件损坏如何解决?
- 一定是无法连接的
[root@localhost bin]# redis-server fatcats/redis.conf
[root@localhost bin]# redis-cli -p 6379
Could not connect to Redis at 127.0.0.1:6379: Connection refused
- 配置文件中提供了修复AOF文件机制
redis-check-aof –fix appendonly.aof
- AOF的优点:
- 每一次修改同步,文件的完整性会更好
- 每秒同步一次,可能会丢失一秒的数据
- 从不同步,效率最高的
- AOF的缺点:
- 相对于数据的文件来说,aof远远大于rdb,修复的速度也比rdb慢
- aof运行效率也比rdb慢,所以我们redis默认的配置是rdb持久化
2.6 AOF重写规则
- 如果AOF文件大于64mb,fork一个新的进程来将文件进行重写
- 重写后的新AOF文件里面包含了恢复当前数据库中的数据的最少命令。在Redis创建新AOF文件完成前,还是会把命令追加到旧AOF文件里,并且会把这一部分命令保存到内存缓存中,一旦新AOF文件创建完成,就会把内存缓存中的命令追加到新AOF文件末尾,并且替换掉旧AOF文件。之后所有的命令追加到新AOF文件末尾。
以上是关于Redis 学习笔记Redis持久化的主要内容,如果未能解决你的问题,请参考以下文章