redis的持久化机制

redis简介
  redis是一个基于内存的nosql数据库,和传统关系数据最大的区别就是数据是存在内存中而不是硬盘上,从而带来了tps的巨大提升。但是基于内存的数据库最大的缺陷就是机器断电或者系统崩溃后数据会全部丢失。但是redis可以有一套自己的持久化机制,可以让他在系统断电或者崩溃后尽可能的少丢数据。下面就来总结下redis提供的持久化机制的各个特性。

redis提供的持久化选项
  redis一共提供两种不同的持久化方法。一种是快照(snapshotting) 它可以将存于某一时刻的数据都写入硬盘里面。还有一种是只追加文件(append-only file AOF),它会在执行命令时,将被执行的写入命令复制到硬盘里面。这两种方法既可以单独使用也可以同时使用。

快照持久化
  快照持久化通过写入dbfilename选项指定的文件里面,并储存在dir选项指定的路径上面。如果在新的快照文件创建完成之前,redis,系统或者硬件这三者之中的任意一个崩溃来,那么redis将丢失最近一次创建快照完成之后的所以写入数据

创建快照方法
  1.通过客户端发送bgsave命令来创建一个快照,redis会创建一个子进程来负责写入这个快照,父进程继续处理命令请求
  2.通过客户端发送save命令来创建一个快照,redis接到save命令在快照创建完成之前不再响应任何命令
  3.用户配置了save配置选项,如save 60 10000 ,那么从redis最近一次创建快照开始之后,当“60秒内10000次写入”这个条件被满足时会自动触发bgsave命令。如果有多个save配置满足任意一个就会触发bgsave。
  4.redis通过shutdown命令接受到关闭服务器请求时,或者收到标准的term命令时会执行save命令,阻塞所有客户端,不再执行客户端发送的命令,知道save命令执行完毕后直接关闭redis服务器。
  5.当一台redis服务器连接到另一台redis服务器,并向对方发送sync命令来开始复制操作的时候,如果主服务器目前没有在执行bgsave操作,或者主服务器并非刚刚执行完bgsave操作,那么主服务器会执行bgsave命令。

AOF持久化
  AOF持久化就是将被执行的写命令写到AOF文件的末尾,以此来记录数据发送的变化。因此redis只要从头到尾执行一次AOF文件包含的所有写命令,就可以护肤AOF文件所记录的数据。

AOF持久化的创建方法
  通过配置 appendonly yes 来打开,通过appendsync来配置AOF文件的同步频率。
  appendsync同步频率有下面这些
  always      每个redis写命令都同步写入硬盘。(严重影响性能)
  everysec   每秒执行一次同步,显示地将多个写命令同步到硬盘
  no            让操作系统来决定应该何时同步。

时间: 2024-08-03 16:19:31

redis的持久化机制的相关文章

Redis数据持久化机制AOF原理分析二

Redis数据持久化机制AOF原理分析二 分类: Redis 2014-01-12 15:36  737人阅读  评论(0)  收藏  举报 redis AOF rewrite 目录(?)[+] 本文所引用的源码全部来自Redis2.8.2版本. Redis AOF数据持久化机制的实现相关代码是redis.c, redis.h, aof.c, bio.c, rio.c, config.c 在阅读本文之前请先阅读Redis数据持久化机制AOF原理分析之配置详解文章,了解AOF相关参数的解析,文章链

Redis源码剖析和注释(十八)--- Redis AOF持久化机制

Redis AOF持久化机制 1. AOF持久化介绍 Redis中支持RDB和AOF这两种持久化机制,目的都是避免因进程退出,造成的数据丢失问题. RDB持久化:把当前进程数据生成时间点快照(point-in-time snapshot)保存到硬盘的过程,避免数据意外丢失. AOF持久化:以独立日志的方式记录每次写命令,重启时在重新执行AOF文件中的命令达到恢复数据的目的. Redis RDB持久化机制源码剖析和注释 AOF的使用:在redis.conf配置文件中,将appendonly设置为y

Redis 的持久化机制

Redis 的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是 Redis 的持久化机制. Redis 的持久化机制有两种,第一种是快照,第二种是 AOF 日志.快照是一次全量备份,AOF 日志是连续的增量备份.快照是内存数据的二进制序列化形式,在存储上非常紧凑,而 AOF 日志记录的是内存数据修改的指令记录文本.AOF 日志在长期的运行过程中会变的无比庞大,数据库重启时需要加载 AOF 日志进行指令重放,这个时间就会

Redis的持久化机制(RDB、AOF)

1. 为什么需要持久化? 因为Redis是内存数据库,它将自己的数据存储在内存里面,一旦Redis服务器进程退出或者运行Redis服务器的计算机停机,Redis服务器中的数据就会丢失. 为了避免数据丢失,所以Redis提供了持久化机制,将存储在内存中的数据保存到磁盘中,用于在Redis服务器进程退出或者运行Redis服务器的计算机停机导致数据丢失时,快速的恢复之前Redis存储在内存中的数据. Redis提供了2种持久化方式,分别为: RDB持久化 AOF持久化 接下来,我们一一详解. 2. R

redis整理の持久化机制

redis是一个支持持久化的内存数据库,也就是说 redis 需要经常将内存中的数据同步到磁盘 来保证持久化.redis 支持两种持久化方式,一种是 Snapshotting(快照)也是默认方式,另 一种是 Append-only file(缩写 aof)的方式. snapshotting方式 快照是默认的持久化方式.这种方式是就是将内存中数据以快照的方式写入到二进制文件中, 默认的文件名为 dump.rdb.可以通过配置设置自动做快照持久化的方式.我们可以配置 redis 在 n 秒内如果超过

Redis的持久化机制包括RBD和AOF两种,对于这两种持久化方式各有优势

RDB机制的策略 RDB持久化是指在指定的时间间隔内将内存中的数据和操作通过快照的方式保存到redis bin目录下的一个默认名为 dump.rdb的文件,可以通过配置设置自动的快照持久化的方式,我们可以配置redis在n秒内进行快照的时间,如果超过这个时间节点,将会自动执行快照操作.虽然这种方式方便快捷,但是无法保证数据的绝对安全可靠,如果服务器在非备份时间跨度内发生了故障,无法做到对当前状态的实时保存,导致数据丢失.而且每次保存 RDB文件时, Redis都需要 fork()出一个子进程,由

LINUX系统编程 由REDIS的持久化机制联想到的子进程退出的相关问题

19:22:01 2014-08-27 引言: 以前对wait waitpid 以及exit这几个函数只是大致上了解,但是看REDIS的AOF和RDB 2种持久化时 均要处理子进程运行完成退出和父进程需要做的什么事情,所以特定看了UNIX环境编程和LINUX系统编程这2本书 重新梳理下整个要点. 内容: 一般而言: 如果程序类似于下面的情况: if((pid=fork())==0) { dochildtthing(); exit(0); } else if(pid>0) { dofathertt

Redis的持久化机制-RDB

RDB: Redis DataBase 1. 什么是RDB RDB:每隔一段时间,把内存中的数据写入磁盘的临时文件,作为快照,恢复的时候把快照文件读进内存.如果宕机重启,那么内存里的数据肯定会没有的,那么再次启动redis后,则会恢复. 2. 备份与恢复 内存备份 --> 磁盘临时文件临时文件 --> 恢复到内存 3. RDB优劣势 优势 每隔一段时间备份,全量备份 灾备简单,可以远程传输 子进程备份的时候,主进程不会有任何io操作(不会有写入修改或删除),保证备份数据的的完整性 相对AOF来

6.redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的?

作者:中华石杉 面试题 redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的? 面试官心理分析 redis 如果仅仅只是将数据缓存在内存里面,如果 redis 宕机了再重启,内存里的数据就全部都弄丢了啊.你必须得用 redis 的持久化机制,将数据写入内存的同时,异步的慢慢的将数据写入磁盘文件里,进行持久化. 如果 redis 宕机重启,自动从磁盘上加载之前持久化的一些数据就可以了,也许会丢失少许数据,但是至少不会将所有数据都弄丢. 这个其实一样,针对