一, 背景
我们知道 Redis 是一种 NoSql 数据库, 常用来做缓存数据库, 因为运行在内存中, 不用每次再到数据库中去查询需要的数据, 所以比普通的关系型数据库性能更优越, 在内存中操作数据肯定比磁盘上性能是很大的提高. 所用很多企业都拿 Redis 来做缓存数据库. 在内存中存储数据就会涉及到一个不可避免的问题, 如果宕机或者机器受到物理损坏或者关机的时候, 内存中的数据就会消失. 但是当我们再次开启 Redis 服务的时候, 数据还是存在的. 既然是数据在内存中存储, 我们再次开机时候, 内存又加载了我们机器出问题时候的数据. Redis 具体是怎么做到的, 这就是我们今天所要说的 Redis 持久化机制.
二, 原理
Redis 持久化实现有两个方式 RDB(Redis DataBase 默认开启)和 AOF(Append Only File 默认关闭)都是通过来保存文件在磁盘中, 在 Redis 服务在启动时, 在将数据读取到内存中. 所以我们在重启开启服务时候, 发现之前的数据还存在.
三, 实现机制
rdb 方式是通过在是定时间内将内存中的数据集快照 (Snapshot) 写入磁盘; 在数据恢复时, 再将快照中的信息读取到内存中.
四, 优缺点
优势: 适合大规模的数据恢复, 对数据的完整性和一致性要求不高;
劣势: 在一定的时间间隔内做备份, 会丢失一部分数据, 因为一般会丢失最后一次的保存记录, 可以通过 lastsave 获取最后一次快照的时间查看.
查看最后一次写入磁盘的时间的命令:
- 10.3.152.78:6379> LASTSAVE
- (integer) 1563805120 #Unix 时间戳
备注: 当我们同时开启两钟持久化方式, Redis 重启时候会优先载入 aof 文件来恢复数据, 因为在一般情况写 aof 存储的文件数据比 rdb 形式存储的文件更加的完整.
五, 恢复模拟
1, 分别把两台 Redis 服务器的 Redis 服务停止.
2, 把需要还原的 rdb 文件, 复制到另外一台服务器上, 查看当前存放位置路径
- 10.3.152.78:6379> config get dir
- 1) "dir"
- 2) "/var/lib/redis" #rdb 文件存放路径, 并保证没有 aof 文件存在, 否则默认优先加载此文件
- 10.3.152.78:6379>
3, 设置相应的权限与修改相同的文件(保证与当前的 rdb 文件名和权限一致, 覆盖)
4, 启动 Redis 服务
5, 用 info 命令查看, 当前的数据数量是否与相符
来源: http://www.bubuko.com/infodetail-3131990.html