Redis持久化——RDB
Redis持久化——RDB
背景
为什么需要持久化?
Redis是内存数据库,内存中的数据会断电即失,因此需要做持久化避免里面的数据在突然断电的情况丢失。
持久化方式都有哪些?
- RDB(Redis DataBase) :将某一时刻的内存快照(snapshot),以二进制方式写入磁盘中.rdb文件的过程。本文重点讲解
- AOF(Append Only File) :以日志的形式记录服务器锁处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录
- RDB和AOF混合存储
持久化流程
- Redis会单独创建一个子进程来进行持久化
- 子进程会将内存写入一个临时的RDB文件
- 等持久化过程结束后,用刚写好的临时文件替换原来的文件
- 若持久化同时有新的写请求,则复制内存页面的副本,在操作系统os写的时候,使用复制机制
触发及加载
触发条件
- 达到配置文件中设置的触发条件
save 900 1 # 900s 即15分钟内写key 1次
save 300 10 # 900s 即5分钟内写key 10次
save 60 10000 # 900s 即1分钟内写key 10000次
-
flushall
清空所有数据库 -
shutdown
退出数据库 -
使用save或bgsave
save会导致redis同步阻塞,基本被废弃
bgsave,后台执行快照操作,同时可以响应客户端请求,但是当内存不够时,将使用虚拟内存,导致redis阻塞
加载
只要将rdb文件放在下面目录下,在redis启动的时候就会加载
127.0.0.1:6379> config get dir
1) "dir"
2) "D:\\install\\Redis-x64-5.0.10" # rdb文件所在的目录
优缺点对比
优点:
大型数据的持久化效率高,子线程操作的
适用于数据完整性要求不高的场景
缺点:
最后一次保存后的操作会丢失
总结
RDB持久化适用于大型数据持久,且对数据完整性要求不高的场景,是一种常用的数据持久化方式。