Redis两种持久化方式(RDB&AOF)

爬虫和转载请注明原文地址;博客园蜗牛:http://www.cnblogs.com/tdws/p/5754706.html

Redis所需内存 超过可用内存怎么办
Redis修改数据多线程并发—Redis并发锁
windows下redis基础操作与主从复制 从而 数据备份和读写分离
Redis两种持久化方式(RDB&AOF)

Redis的持久化过程中并不需要我们开发人员过多的参与,我们要做的是什么呢?除了深入了解RDBAOF作用原理,剩下的就是根据实际情况来制定合适的策略了,再复杂一点,也就是定制一个高可用的,数据安全的策略了。

先来看RDB持久化方式:

在RDB方式下,你有两种选择,一种是手动执行持久化数据命令来让redis进行一次数据快照,另一种则是根据你所配置的配置文件 的 策略,达到策略的某些条件时来自动持久化数据。而手动执行持久化命令,你依然有两种选择,那就是save命令和bgsave命令。

save操作在Redis主线程中工作,因此会阻塞其他请求操作,应该避免使用。

(默认下,持久化到dump.rdb文件,并且在redis重启后,自动读取其中文件,据悉,通常情况下一千万的字符串类型键,1GB的快照文件,同步到内存中的 时间是20-30秒

bgSave则是调用Fork,产生子进程,父进程继续处理请求。子进程将数据写入临时文件,并在写完后,替换原有的.rdb文件。Fork发生时,父子进程内存共享,所以为了不影响子进程做数据快照,在这期间修改的数据,将会被复制一份,而不进共享内存。所以说,RDB所持久化的数据,是Fork发生时的数据。在这样的条件下进行持久化数据,如果因为某些情况宕机,则会丢失一段时间的数据。如果你的实际情况对数据丢失没那么敏感,丢失的也可以从传统数据库中获取或者说丢失部分也无所谓,那么你可以选择RDB持久化方式。

再谈一下配置文件的策略,实际上它和bgsave命令持久化原理是相同的。

这是配置文件默认的策略,他们之间的关系是或,每隔900秒,在这期间变化了至少一个键值,做快照。或者每三百秒,变化了十个键值做快照。或者每六十秒,变化了至少一万个键值,做快照。

下面再来说一说AOF快照方式:

AOF,append only file。

配置文件中的appendonly修改为yes。开启AOF持久化后,你所执行的每一条指令,都会被记录到appendonly.aof文件中。但事实上,并不会立即将命令写入到硬盘文件中,而是写入到硬盘缓存,在接下来的策略中,配置多久来从硬盘缓存写入到硬盘文件。所以在一定程度一定条件下,还是会有数据丢失,不过你可以大大减少数据损失。

这里是配置AOF持久化的策略。redis默认使用everysec,就是说每秒持久化一次,而always则是每次操作都会立即写入aof文件中。而no则是不主动进行同步操作,是默认30s一次。当然always一定是效率最低的,个人认为everysec就够用了,数据安全性能又高。

Redis也允许我们同时使用两种方式,再重启redis后会从aof中恢复数据,因为aofrdb数据损失小嘛。

区别和深入理解:

RDB每次进行快照方式会重新记录整个数据集的所有信息。RDB在恢复数据时更快,可以最大化redis性能,子进程对父进程无任何性能影响。

AOF有序的记录了redis的命令操作。意外情况下数据丢失甚少。他不断地对aof文件添加操作日志记录,你可能会说,这样的文件得多么庞大呀。是的,的确会变得庞大,但redis会有优化的策略,比如你对一个key1键的操作,set key1 001 ,  set key1 002, set key1 003。那优化的结果就是将前两条去掉咯,那具体优化的配置在配置文件中对应的是

前者是指超过上一次aof重写aof文件大小的百分之多少,会再次优化,如果没有重写过,则以启动时为主。后者是限制了允许重写的最小aof文件大小。bgrewriteaof命令是手动重写命令,会fork子进程,在临时文件中重建数据库状态,对原aof无任何影响,当重建旧的状态后,也会把fork发生后的一段时间内的数据一并追加到临时文件,最后替换原有aof文件,新的命令继续向新的aof文件中追加。

时间: 2024-10-26 05:48:22

Redis两种持久化方式(RDB&AOF)的相关文章

Redis:两种持久化方式RDB和Aof对比(3)

一.RDB快照 1.概念 默认的持久化方案. 在指定时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中. 在指定目录下生成一个dump.rdb文件. 重启会通过加载dump.rdp文件恢复数据. 2.对应配置参数 save <seconds> <changes> eg: save 900 1 save 300 10 save 60 10000 若不想用RDB方案,则为save "" # 时间策略save 900 1 save 300 10 save

探究Redis两种持久化方式下的数据恢复

对长期奋战在一线的后端开发人员来说,都知道redis有两种持久化方式RDB和AOF,虽说大家都知道这两种方式大概运作方式,但想必有实操了解得不会太多. 这里是自己实操两种持久化方式的一点点记录. 先看以下摘录自redis官网原文解释(当然原文是English,这里用google翻译过了.) Redis持久性 Redis提供了不同的持久性选项范围: RDB持久性按指定的时间间隔执行数据集的时间点快照. AOF持久性会记录服务器接收的每个写入操作,这些操作将在服务器启动时再次播放,以重建原始数据集.

redis两种持久化方式的优缺点

redis两种持久化的方式 RDB持久化可以在指定的时间间隔内生成数据集的时间点快照 AOF持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集,AOF文件中全部以redis协议的格式来保存,新命令会被追加到文件的末尾,redis还可以在后台对AOF文件进行重写,文件的体积不会超出保存数据集状态所需要的实际大小, redis还可以同时使用AOF持久化和RDB持久化,在这种情况下,当redis重启时,它会有限使用AOF文件来还原数据集,因为AOF文件保存的数据集

Redis系列之----Redis的两种持久化机制(RDB和AOF)

Redis的两种持久化机制(RDB和AOF) 什么是持久化 ???Redis的数据是存储在内存中的,内存中的数据随着服务器的重启或者宕机便会不复存在,在生产环境,服务器宕机更是屡见不鲜,所以,我们希望Redis能够将数据从内存中以某种形式保存到磁盘中,使得重启的时候可以加载磁盘中的文件记录恢复数据,这一过程便是Redis的持久化. ???Redis支持两种持久化机制,一种是RDB,另一种是AOF.Redis默认情况下使用RDB方式进行持久化.两种持久化可以单独使用其中的一种,也可以二者结合使用,

(三)Redis两种持久化方案

Redis的持久化策略:2种 RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘.RDB是Redis默认采用的持久化方式. ---------aof:把所有的对redis的服务器进行修改的命令都存到一个文件里,命令的集合 rdb: 默认情况下,是快照rdb的持久化方式,将内存中的数据以快照的方式写入二进制文件中,默认的文件名是dump.rdb redis.conf配置: save 900 1 save 300 10

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

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

Redis的两种持久化方式详细介绍

一,Redis是一款基于内存的数据库,可以持久化,在企业中常用于缓存,相信大家都比较熟悉Redis了,下面主要分享下关于Redis持久化的两种模式 1.半持久化模式(RDB,filesnapshotting) 此模式是Redis默认的备份方式,通过快照方式,将数据从内存写入磁盘中,如果Redis异常退出,下次启动则从打快照的这个时间节点来恢复此之前的数据,根据数据量大小.结构.服务器性能不同,通常将记录1千万个string类主键.大小为1GB的快照文件载入内存中需要20~30s 触发快照参数在配

[转载] redis 的两种持久化方式及原理

转载自http://www.m690.com/archives/371 Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能.所以Redis也可以被看成是一个数据结构服务器.Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”):也可以把每一次数据变化都写入到一个app

redis两种调用方式实例

在下面的代码示例中,将给出两种最为常用的Redis命令操作方式,既普通调用方式和基于管线的调用方式.    注:在阅读代码时请留意注释. 1 #include <stdio.h>  2#include <stdlib.h>  3#include <stddef.h>  4#include <stdarg.h>  5#include <string.h>  6#include <assert.h>  7#include <hire