您的位置:首页 > 数据库 > Redis

Redis学习笔记(二) Redis持久化

2015-12-22 09:01 369 查看
Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个文件里面(这称为“全持久化模式”)。

 

这里主要介绍这两种持久化方法

RDB方式和 AOF方式

可以单独的使用其中一种方式,也可以将两者结合起来一起使用

 

在这种情况下,当 Redis 重启时,它会优先使用 AOF 文件来还原数据集,因为 AOF 文件保存的数据集通常比 RDB 文件所保存的数据集更完整. 你甚至可以关闭持久化功能,让数据只在服务器运行时存在.

 

RDB 是 Redis的默认持久化方法

安装Redis3.0.5

安装Reids之前首先要安装一些依赖

yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc-c++ libstdc++-devel tcl

Redis下载地址:

http://redis.io/download

通过wget下载Redis

wget http://download.redis.io/releases/redis-3.0.5.tar.gz[/code] 
解压文件

tar –zxvf redis-3.0.5.tar.gz


进入Redis目录

cd redis-3.0.5

执行make 和 make install命令

make
make install

make test 这个需要执行很长的时间 就不执行了

 

将redis.conf文件拷贝到etc下面

cp redis.conf /etc/

编辑redis.conf 

修改为后台启动

将参数daemonize 修改为 yes 

RDB方式

RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。

 

在Redis配置文件中已经预置了3个条件



满足其中任何一个条件就会进行快照

禁用RDB

默认的RDB的文件路径是在当前目录, 文件名是 : dump.rdb,可以再配置文件中修改路径和文件名,分别是dir和dbfilename



Redis启动后会读取RDB快照文件,将数据从硬盘中载入到内存,一般情况下1GB的快照文件载入到内存的时间约为20~30分钟.(不同服务器会存在差异)

 

如果要禁止Redis的RDB的持久化方式那么只用吧上面的出发条件禁止掉就OK了



RDB的持久化过程

①   Redis是使用fork函数复制一份当前进程(父进程)的副本(子进程);

②  父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入到磁盘的临时文件中;

③  当子进程写入完所有的数据后会用该临时文件替换掉旧的RDB文件;

 

注意:

由于Redis使用fork来复制一份当前进程,那么子进程就会占有和主进程一样的内存资源,如果主进程是8G内存,那么在备份的时候必须保证有16GB的内存,要不然会启用虚拟内存,性能非常的差,如果数据集非常巨大,也可能会影响到CPU

 

RBD文件是通过压缩的, 可以通过配置rdbcompression参数来禁用压缩



启动压缩的话会占用服务器的CPU资源

 

除了Redis自动进行快照,你也可以通过命令进行手痛快照

SAVE   :由主线程进行快照

BGSAVE :fork子进程进行快照



AOF方式

AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集. AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾. Redis 还可以在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小

 

AOF持久化通过修改appendonly参数 来设置 默认是不开启的

 

AOF文件的位置和RDB文件的位置是相同的,都是通过dir参数设置,默认的文件名是apendonly.aof,也可以通过apendfilename参数修改



AOF内容

在Redis里面设置几个key 



查看产生的AOF文件



AOF把操作的日志记录下来,可以保证数据不丢失,但是AOF会有性能问题,每次操作都会写一遍文件.

 

查询数据的操作是不记录的

AOF文件优化

我们可以使用BGREWRITEAOF命令来重写AOF文件

 

重写策略的参数设置:



auto-aof-rewrite-percentage

表示当前AOF文件大小超过上一次重写时的AOF文件大小的百分之多少时会再次进行重写,如果之前没有重写过,则以启动时的AOF文件大小为依据.

上面的表示百分之一百

 

uto-aof-rewrite-min-size

表示限制允许重写的最小AOF文件大小,通常在AOF文件很小的时候即使其中有些冗余的命令也是可以忽略的.

 

我们使用一个hset命令来设置一个key



AOF文件



执行BGREWRITEAOF命令之后




                         优化之后                       


文件到磁盘的机制

文件写入默认情况下会先写入到系统的缓存中,系统每30秒同步一次,才是真正的写入到硬盘中,如果在这30秒服务器宕机的话,那么数据也会丢失,可以通过修改Reids 配置参数来修改同步策略.



AOF 和 RDB的优缺点和区别

http://my.oschina.net/davehe/blog/174662
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Redis持久化 RDB aof