redis的数据持久化

就目前自己的理解redis和memcache的区别就是redis可以数据持久化,支持的数据类型有5种

所以就数据持久化这块可以好好了解一下

我们安装的redis的2.6版本,安装之后默认就已经开启了rdb

数据持久化分rdb和aof

快照:(snapshotting)它将某一时刻的的所以数据写入硬盘

只追加文件:(append-only file) 他会在执行写命令时,将会把写命令复制到磁盘里面

快照(rdb):

save 900 1     #900秒时间,至少有一条数据更新,则保存到数据文件中

save 300 10    #300秒时间,至少有10条数据更新,则保存到数据文件中

save 60 10000  #60秒时间,至少有10000条数据更新,则保存到数据文件中

rdbcompression yes  #指定存储至本地数据库时是否压缩数据,默认是yes,redis采用LZF压缩,如果为了节省CPU时间 #可以关闭该选项,但会导致数据库文件扁的巨大

dbfilename dump.rdb #指定rdb保存到本地数据库文件名

stop-writes-on-bgsave-error yes  #当硬盘因为权限等原因无法写入时,停止写入

rdbchecksum yes    #对rdb文件进行校验

创建快照的方式有以下4种:

1,客户端执行BESAVE,服务端会fork一个子进程来负责将快照写入硬盘,父进程继续处理写请求

2,客户端执行save,服务端会在创建快照完毕之前不在响应其他的命令,一般没有足够的内存去执行BESAVE的情况下才会去执行save,一般没有用这个

3,当redis服务端接受了一个shutdown的时候,或收到一个标准TERM信号(kill)的时候,会执行一个SAVE,会阻塞所以客户端请求,然后执行完save之后关闭服务

4,当作redis主从的时候(请看我的另一篇博客redis主从同步)

个人感觉如果对数据的保存有特别高的要求,就不要用rdb可以用aof

只追加文件(aof):

#appendonly no   #是否在每次更新操作后进行日志记录,是否开启启用aof。

# appendfsync always       # always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全,最好不要用这个会很损害硬盘的)

#appendfsync everysec       # everysec:表示每秒同步一次(折衷,默认值)

#appendfsync no             # no:表示等操作系统进行数据缓存同步到磁盘(快)\

#

#auto-aof-rewrite-percentage 100

#auto-aof-rewrite-min-size 64mb

当aof体积大于64mb的时候,并且aof文件的体积比上次重写之后的体积大于至少一倍(100%)的时候,redis执行bgrewriteaof

no-appendfsync-on-rewrite   no#如下面的解释

bgrewriteaof机制,在一个子进程中进行aof的重写,从而不阻塞主进程对其余命令的处理,同时解决了aof文件过大问题。

现在问题出现了,同时在执行bgrewriteaof操作和主进程写aof文件的操作,两者都会操作磁盘,而bgrewriteaof往往会涉及大量磁盘操作,这样就会造成主进程在写aof文件的时候出现阻塞的情形,现在no-appendfsync-on-rewrite参数出场了。如果该参数设置为no,是最安全的方式,不会丢失数据,但是要忍受阻塞的问题。如果设置为yes呢?这就相当于将appendfsync设置为no,这说明并没有执行磁盘操作,只是写入了缓冲区,因此这样并不会造成阻塞(因为没有竞争磁盘),但是如果这个时候redis挂掉,就会丢失数据。丢失多少数据呢?在linux的操作系统的默认设置下,最多会丢失30s的数据。

因此,如果应用系统无法忍受延迟,而可以容忍少量的数据丢失,则设置为yes。如果应用系统无法忍受数据丢失,则设置为no

时间: 2024-10-14 16:42:23

redis的数据持久化的相关文章

redis的数据持久化存储

redis的数据持久化存储 Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化.Redis支持两种持久化方式: 一.snapshotting(快照)方式快照是默认的持久化方式.这种方式是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb.我们可以配置redis在n秒内如果超过若干个key被修改就自动做快照持久保存. 在约87行,有默认的快照策略(指定在多长时间内,有多少次更新操作,就将数据同步到数据快照文件,可以多个条件

进阶的Redis之数据持久化RDB与AOF

大家都知道,Redis之所以性能好,读写快,是因为Redis是一个内存数据库,它的操作都几乎基于内存.但是内存型数据库有一个很大的弊端,就是当数据库进程崩溃或系统重启的时候,如果内存数据不保存的话,里面的数据就会丢失不见了.这样的数据库并不是一个可靠的数据库. 所以数据的持久化是内存型数据库的重中之重.它不仅提供数据保存硬盘的功能,还可以借此用硬盘容量扩展数据存储空间,使得Redis的可以存储超过机器本身内存大小的数据. Redis对于数据持久化提供了两种持久化的方案,RDB与AOF.它们的原理

redis学习——数据持久化

一.概述 Redis的强大性能很大程度上都是因为所有数据都是存储在内存中的,然而当Redis重启后,所有存储在内存中的数据将会丢失,在很多情况下是无法容忍这样的事情的.所以,我们需要将内存中的数据持久化!典型的需要持久化数据的场景如下: 将Redis作为数据库使用: 将Redis作为缓存服务器使用,但是缓存miss后会对性能造成很大影响,所有缓存同时失效时会造成服务雪崩,无法响应. 本文介绍Redis所支持的两种数据持久化方式. 二.Redis数据持久化 Redis支持两种数据持久化方式:RDB

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 数据持久化 1.快照(snapshots) 缺省情况情况下,Redis把数据快照存放在磁盘上的二进制文件中,文件名为dump.rdb.你可以配置Redis的持久化策略,例如数据集中每N秒钟有超过M次更新,就将数据写入磁盘:或者你可以手工调用命令SAVE或BGSAVE. 数据保存的目录: 工作原理 Redis forks. 子进程开始将数据写到临时RDB文件中. 当子进程完成写RDB文件,用新文件替换老文件. 这种方式可以使Redis使用copy-on-write技术. 2.APP

Redis学习总结(1)——数据持久化

以前研究Redis的时候,很多东西都不太明白,理解得也不太深,现在有时间重新拾起来看看,将一些心得记录下来,希望和大家一起探讨. 一.简介 Redis是一个单线程高可用的Key-Value存储系统,和Memcached类似,但是实际使用上最大的区别有两方面: Redis支持多种数据结构类型的value,比如string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型): Memcached在出现系统瘫痪的情况下,无法实现系统恢复,而

redis 配置文件 append only file(aof)部分---数据持久化

############################## 仅追加方式 ############################### #默认情况下Redis会异步的将数据导出到磁盘上.这种模式对许多应用程序已经足够了,#但是如果断电或者redis进程出问题就会导致一段时间内的更新数据丢失(取决与配置项)##这种只增文件是可选的能够提供更好的体验的数据持久化策略.#举个例子,如果使用默认的配置数据fsync策略,在服务器意外断电的情况下redis只会丢失一秒中内的更新数据,#或者当redis进

Redis数据持久化

总的来说有两种持久化方案:RDB和AOF RDB方式按照一定的时间间隔对数据集创建基于时间点的快照. AOF方式记录Server收到的写操作到日志文件,在Server重启时通过回放这些写操作来重建数据集.该方式类似于MySQL中基于语句格式的binlog.当日志变大时Redis可在后台重写日志. 若仅期望数据在Server运行期间存在则可禁用两种持久化方案.在同一Redis实例中同时开启AOF和RDB方式的数据持久化方案也是可以的.该情况下Redis重启时AOF文件将用于重建原始数据集,因为叫R

redis使用基础(五) ——Redis数据持久化

redis使用基础(五) --Redis数据持久化 (转载请附上本文链接--linhxx) 当服务器突然发生问题,或者redis重启,如果希望将数据持久化在硬盘中,下次开启redis还有数据时,redis提供了两种方案,一个叫做RDB(通过内存快照(Snapshotting)实现),另一个叫做AOF(日志追加(Append-only file)).通常结合两种方式来实现redis的持久化. 1.RDB RDB通过内存快照实现,会将redis当前的全部数据以快照的方式写入二进制文件中.实现快照有以