Redis持久化
来源:互联网 发布:福州摩尔软件如何 编辑:程序博客网 时间:2024/05/29 09:56
Redis数据持久化通过两种方式RDB和AOF,RDB方式会根据配置的规则将内存中的数据持久化到硬盘上,AOF则是在每次执行写入命令后将其记录下来。
RDB方式,当符合某种规则时,会将内存中的数据生成一份副本存储到硬盘上,这个过程称为“快照”。Reids会在以下几种情况下对数据进行快照
- 根据配置规则进行自动快照;
Redis使用fork函数复制一份当前进程(父进程)的副本(子进程);
父进程继续处理来自客户端的请求,子进程开始将内存中的数据写入硬盘中的临时文件;
当子进程写完所有的数据后,用该临时文件替换旧的RDB文件,至此,一次快照操作完成。
Redis启动时会自动读取RDB快照文件,将数据从硬盘载入到内存,根据数量的不同,这个过程持续的时间也不尽相同,通常来讲,一个记录1000万个字符串类型键,大小为1GB的快照文件载入到内存需要20-30秒的时间。
AOF方式
在使用Redis存储非临时数据时,一般都需要打开AOF持久化来降低进程终止导致的数据丢失,AOF可以将Redis执行的每一条写命令追加到硬盘文件中,这已过程显然会降低Redis的性能,但是大部分情况下这个影响是可以接受的,另外,使用较快的硬盘能提高AOF的性能。
开启AOF
默认情况下,Redis没有开启AOF(append only file)持久化功能,可以通过在配置文件中作如下配置启用:
appendonly yes
开启之后,Redis每执行一条写命令就会将该命令写入硬盘中的AOF文件。AOF文件保存路径和RDB文件路径是一致的,都是通过dir参数配置,默认文件名是:appendonly.aof,可以通过配置appendonlyfilename参数修改,例如:
appendonlyfilename appendonly.aof
AOF文件重写
假设Redis执行了如下命令:
如果这所有的命令都写到AOF文件的话,将是一个比较蠢行为,因为前面两个命令会被第三个命令覆盖,所以AOF文件完全不需要保存前面两个文件,事实上Redis确实就是这么做的。删除AOF文件中无用的命令的过程成为”AOF重写”,AOF重写可以在配置文件中做相应的配置,当满足配置的条件时,自动进行AOF重写操作。配置如下:
第一行的意思是,目前的AOF文件的大小超过上一次重写时的AOF文件的百分之多少时再次进行重写,如果之前没有重写过,则以启动时AOF文件大小为依据。
第二行的意思是,当AOF文件的大小大于64MB时才进行重写,因为如果AOF文件本来就很小时,有几个无效的命令也是无伤大雅的事情。
这两个配置项通常一起使用。
同步硬盘数据
虽然每次执行更改数据库的内容时,AOF都会记录执行的命令,但是由于操作系统本身的硬盘缓存的缘故,AOF文件的内容并没有真正地写入硬盘,在默认情况下,操作系统会每隔30s将硬盘缓存中的数据同步到硬盘,但是为了防止系统异常退出而导致丢数据的情况发生,我们还可以在Redis的配置文件中配置这个同步的频率:
第一行表示每次AOF写入一个命令都会执行同步操作,这是最安全也是最慢的方式;
第二行表示每秒钟进行一次同步操作,一般来说使用这种方式已经足够;
第三行表示不主动进行同步操作,这是最不安全的方式。
原文链接:http://qifuguang.me/2015/10/13/Redis持久化
- 【redis】redis 持久化
- 【redis】redis持久化
- redis---Redis持久化
- 【Redis】Redis持久化存储
- 【Redis学习】:redis持久化
- 七.redis 持久化
- Redis:七、持久化
- redis 持久化
- 七.redis 持久化
- redis数据持久化
- Redis持久化
- 解密Redis持久化
- 七.redis 持久化
- Redis的持久化
- 解密Redis持久化
- 解密Redis持久化
- redis持久化机制
- redis 持久化
- MiniDao
- 提供资源---Develop API Guides App Resources
- Android有序广播OrderedBroadcast
- spring security3.0控制多个用户账号同时登录和管理员踢出用户
- 关于一个分解质因数的问题
- Redis持久化
- 网页简单布局之结构与表现原则(慕课网笔记整理)
- Android中关于log的几种区别/log.v log.d log.i log.w log.e
- Java与算法之(5) - 老鼠走迷宫(深度优先算法)
- X265中的线程模型
- 我安装kali linux之后要做的10件事
- VC++ 2010 知识点1
- 【Java】——Java反射
- linux下curl的地址使用双引号引用的原因