Redis持久化
条评论Redis持久化
持久化简介
- 数据持久化就是将数据存储到断电后数据不丢失的设备中
- Redis的持久化包括RDB和AOF两种⽅式
- 持久化的一般步骤如下:
- 客户端向服务发送写请求
- 服务端接受写请求
- 服务端调用Write系统调用,发送写数据请求
- OS将缓冲区的数据写到存储介质
- 磁盘控制器将数据写到磁盘的物理介质中
通信协议
在介绍Redis持久化之前有必要介绍下Redis的通信协议,因为这部分和后面讲的某种持久化策略有很多相似的地方。Redis的通信协议设计的有以下三个特点:
- 易于实现
- 可以高效的被计算机分析
- 可以很容易被人类读懂
数据发送协议
1 | *<参数数量> CR LF |
数据接受协议
1 | 状态回复(status reply)的第⼀一个字节是 "+" |
AOF详解
AOF(Append Only File )是基于变更日志的持久化。以文本追加的方式进行持久化,文本内容如数据发送协议。AOF的持久化策略如下:
- AOF_FSYNC_NO:不保存
- AOF_FSYNC_EVERYSEC:每秒钟保存⼀次
- AOF_FSYNC_ALWAYS:每次执⾏数据变更命令
使用AOF的方式进行持久化,可以让服务保留更多的持久化数据,但是以追加的方式写数据,会导致AOF文件不断的膨胀,所以需要定期的进行Rewrite,所谓Rewrite就是把记录在AOF文件中的重复命令清理掉,如下情况会在AOF文件中一直追加,所谓rewrite操作就是将多次操作归并为单次操作,需要特别说明的是AOF文件的rewrite支持在后台使用单独的进程操作。1
2
3
4set mykey aaa
set mykey bbb
set mykey ccc
set mykey ddd
RDB详解
RDB是基于数据快照的持久化,持久化发生在RDB快照的时刻,快照时刻用如下参数控制:1
2
3
4
save 900 1 //900秒内⾄少1个key值改变,则进⾏一次持久化
save 300 10 //300秒内至少10个Key值改变,则进行一次持久化
save 60 10000 //60秒内至少10000个Key值改变,则进行一次持久化
从上面的策略可以看出,RDB的持久化是一种兼顾时间和空间的控制策略,但同AOF相比,数据一般不如AOF完备,但是由于RDB使用的是紧凑的二进制格式保存数据,所以在磁盘上占用更少的存储空间。基于RDB的数据持久化同AOF的Rwrite一样,也支持使用后台进程操作。
AOF与RDB比较
- AOF保存的数据集⽐RDB更完整
- RDB⽂件比AOF⽂件更加紧凑
- RDB⽂件恢复速度优于AOF
更多图文资料
- 本文链接:http://www.darcy.org.cn/2017/03/11/Redis-持久化/
- 版权声明:作者拥有版权,转发请注明出处来源