我爱编程

redis-05-持久化

2017-04-04  本文已影响62人  hylexus

[TOC]

1 Redis持久化

持久化,顾名思义就是将数据存储到存储介质中。Redis 提供了不同级别的持久化方式:

2 RDB

2.1 优点

2.2 缺点

2.3 RDB中的fock

此处的fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等)

数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程

2.4 RDB的触发条件

save 900 1 #   after 900 sec --(15 min) 15分钟内至少有一个key改变
save 300 10 #   after 300 sec --(5 min) 5分钟内至少10个key改变
save 60 10000 #   after 60 sec --60秒内至少10000个key改变

save时只管保存,其它不管,客户端请求全部阻塞

在后台异步进行快照操作,快照同时还可以响应客户端请求。

可以通过lastsave命令获取最后一次成功执行快照的时间。

2.5 从RDB文件恢复数据

.rdb数据库文件复制到redis配置文件中SNAPSHOTTING段指定的dir指令配置的目录,启动redis即可。

默认就是你启动redis时所在的目录。

################################ SNAPSHOTTING  ################################
# 省略其他配置
# 请注意:必须指定一个目录,而不是一个文件名.
dir ./

该选项的值可以通过以下命令动态获取:

127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/soft"
127.0.0.1:6379>  

2.6 禁用RDB

redis-cli config set save ""
################################ SNAPSHOTTING  ################################
# 省略其他配置
#   save ""

2.7 RDB的适用场景

3 AOF

3.1 优点

3.2 缺点

3.3 AOF重写

什么是AOF重写?

AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制:

当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集.

就大概是下面这个意思:

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k1 v2
OK
127.0.0.1:6379> set k1 v3
OK

其实以上命令最终就是和下面命令等价的:

127.0.0.1:6379> set k1 v3

原理

Reids会fork出一条新进程来将文件重写(先写临时文件最后再rename),遍历新进程的内存数据,每条记录有一条set语句

重写aof文件的操作,不读取旧的aof文件,而是将整个内存中的数据内容用命令的方式重写了一个新的aof文件.

3.4 AOF重写的触发条件

127.0.0.1:6379> BGREWRITEAOF
Background append only file rewriting started
############################## APPEND ONLY MODE ###############################
# 省略其他配置
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

3.5 从AOF恢复数据

############################## APPEND ONLY MODE ###############################
# 省略其他配置
appendonly yes
redis-check-aof --fix appendonly.aof

3.6 RDB到AOF的动态切换

在 Redis 2.2 或以上版本,可以在不重启的情况下,从 RDB 切换到 AOF :

redis-cli config set appendonly yes
redis-cli config set save “”

4 选哪个呢?

参考资料

上一篇 下一篇

猜你喜欢

热点阅读