Redis 之 通过RDB文件进行恢复

一、背景

我们知道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命令查看,当前的数据数量是否与相符

原文地址:https://blog.51cto.com/12965094/2422662

时间: 2024-11-07 12:31:58

Redis 之 通过RDB文件进行恢复的相关文章

REDIS 勿删除rdb文件如何从内存中恢复数据

redis的数据是在内存中的,如果redis重启或间隔一定时间redis会把内存保存在硬盘上的一个.rdb文件中做持久化,以前刚刚开始用redis的时候,不小心把.rdb文件给误删除了,但你只要正常save或者重启redis,rdb文件会自动生成. 但随着线上业务增加,redis的数据会越来越大,在用这种方法会出现错误,不能把内存中的数据保存到rdb文件中,这时需要只要做以下几步,就可以恢复rdb文件了: 进入到redis端口,info查看配置信息 进入redis端口 执行 config set

redis怎么将rdb文件和aof文件还原数据库

1   AOF ----->      appendonly  yes     2  cp   appendonly.aof 到redis的数据库目录也就是配置文件里面的dir关键字   3  重启服务 2  RDB  ----->      appendonly   no     2 cp    dump.rdb到redis数据库目录也就是配置文件里面的dir关键字   3  重启服务 如果只配置 AOF ,重启时加载 AOF 文件恢复数据: 如果同时配置了 RDB 和 AOF ,启动是只加

redis持久化策略RDB和AOF

Redis 持久化: redis 提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集. AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾. Redis 还可以在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存

redis学习笔记——RDB和AOF持久化

为防止数据丢失,需要将 Redis 中的数据从内存中 dump 到磁盘,这就是持久化.Redis 提供两种持久化方式:RDB 和 AOF.Redis 允许两者结合,也允许两者同时关闭. RDB 可以定时备份内存中的数据集.服务器启动的时候,可以从 RDB 文件中恢复数据集. AOF(append only file) 可以记录服务器的所有写操作.在服务器重新启动的时候,会把所有的写操作重新执行一遍,从而实现数据备份.当写操作集过大(比原有的数据集还大),Redis 会重写写操作集. 值得一提的是

redis 持久化之 RDB & AOF

Redis 持久化实现方式 快照对数据某一时间点的完整备份.例如Linux 快照备份.Redis RDB.MySQL Dump. 日志将数据的所有操作都记录到日志中,需要恢复时,将日志重新执行一次.MySQL biglog.Redis AOF. RDB 什么是 RDB 将redis内存中的数据,完整的生成一个快照,以.rdb结尾的文件保存在硬盘上,当需要恢复时,再从文件加载到内存中. RDB 三种触发方式 save命令触发(同步) [[email protected] ~]$ redis-cli

【Redis源码剖析】 - Redis持久化之RDB

原创作品,转载请标明:http://blog.csdn.net/xiejingfa/article/details/51553370 Redis是一个高效的内存数据库,所有的数据都存放在内存中.我们知道,内存中的信息会随着进程的退出或机器的宕机而消失.为此,Redis提供了两种持久化机制:RDB和AOF.这两种持久化方式的原理实际上就是把内存中所有数据的快照保存到磁盘文件上,以避免数据丢失. 今天我们主要来介绍一下RDB持久化机制RDB的实现原理,涉及的文件为rdb.h和rdb.c. RDB的主

redis数据库通过dump.rdb文件恢复数据库或者数据库迁移

环境:centos7.2软件:redis-3.2.10(yum安装) 情景一:公司之前的redis没有开启aof模式,一直是rdb模式,但是数据又非常重要,数据一点也不能丢失,所以需要开启aof,但是redis默认是从appendonly.aof加载数据,systemctl start redis的时候,数据库是空的,因为我们并没有appendonly.aof文件,而且关闭redis的时候,会把dump.rdb清空 情景二:redis数据库迁移,我们可以只用dump.rdb文件,因为dump.r

rdb文件解析及恢复

参见:rdb_parse rdb文件解析及恢复,布布扣,bubuko.com

Redis rdb文件CRC64校验算法 Java实现

查看RDB文件结构,发现最后的8字节是CRC64校验算得,从文件头开始直到8字节校验码前的FF结束码(含),经过CRC64校验计算发现,貌似最后的8字节是小端模式实现的. 参考redis的crc64实现的代码,点击查看 Java代码如下: 1 package com.jadic.utils; 2 3 /** 4 * @author Jadic 5 * @created 2014-5-15 6 */ 7 public class CRC64 { 8 private static final lon