设为首页 加入收藏

TOP

小贝_redis高级应用-持久化(二)
2015-11-21 01:42:29 来源: 作者: 【 】 浏览:1
Tags:小贝 _redis 高级 应用 持久化
向主进程发送信号,通知保存已完成。因为rdbSave 在子进程被调用,所以 Redis 服务器在BGSAVE 执行期间仍然可以继续处理客户端的请求。

1.2、运行例子

a、启动redis

\

b、物理磁盘

\

c、内置客户端操作

\

d、终止客户端

\

e、重启redis

?

\

?

2、AOF

快照功能并不是非常耐久(durable): 如果 Redis 因为某些原因而造成故障停机, 那么服务器将丢失最近写入、且仍未保存到快照中的那些数据。

1.1、运作方式

?

Redis 执行 fork() ,现在同时拥有父进程和子进程。子进程开始将新 AOF 文件的内容写入到临时文件。对于所有新执行的写入命令,父进程一边将它们累积到一个内存缓存中,一边将这些改动追加到现有 AOF 文件的末尾: 这样即使在重写的中途发生停机,现有的 AOF 文件也还是安全的。当子进程完成重写工作时,它给父进程发送一个信号,父进程在接收到信号之后,将内存缓存中的所有数据追加到新 AOF 文件的末尾。

?

搞定!现在 Redis 原子地用新文件替换旧文件,之后所有命令都会直接追加到新 AOF 文件的末尾。

1.2、保存模式

?

每次有新命令追加到 AOF 文件时就执行一次 fsync :非常慢,也非常安全。每秒 fsync 一次:足够快(和使用 RDB 持久化差不多),并且在故障时只会丢失 1 秒钟的数据。从不 fsync :将数据交给操作 系统来处理。更快,也更不安全的选择。

?

推荐(并且也是默认)的措施为每秒 fsync 一次, 这种 fsync 策略可以兼顾速度和安全性。

1.3、读取和还原数据

?

Redis 读取 AOF 文件并还原数据库的详细步骤如下:

?

? 创建一个不带网络连接的伪客户端(fakeclient)。

? 读取 AOF 所保存的文本,并根据内容还原出命令、命令的参数以及命令的个数。

? 根据命令、命令的参数和命令的个数,使用伪客户端执行该命令。

? 执行 2 和 3 ,直到 AOF 文件中的所有命令执行完毕。

完成第 4 步之后, AOF 文件所保存的数据库就会被完整地还原出来。

1.4、例子

a、修改redis配置文件(这里是关闭rdb,而且运行模式为每次更新一次aof文件)

\

b、重启redis

\

c、客户端进行连接并操作

\

d、终止redis并重启

\

?

?

?

3、RDB+AOF

Redis同时运行着rdb和aof两种模式

那么当 Redis 启动时,程序会优先使用 AOF 文件来恢复数据集, 因为 AOF 文件所保存的数据通常是最完整的

1、运行例子

a、修改redis配置文件,设置同时启动rdb和aof

b、启动redis

\

c、客户端操作数据

\

d、终止redis

\

?

?

五、总结

1、redis 支持rdb和aof等两种持久方式,如果都关闭rdb和aof等方式。则可以把redis看成是内存缓存

2、如果rdb和aof都开启,则优先考虑aof

3、rdb可以看成是保存数据结果,而aof则是记录修改/写入等操作

4、根据rdb和aof的作用,可以用rdb作为完全备份,而把aof作为增量备份

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇resetlogs开库遇到enq:DM-content.. 下一篇小贝_redis高级应用-安全性

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: