最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定

Redis實(shí)踐(五)-持久化的取舍和選擇

標(biāo)簽:
Redis

5bcc39be0001793410000242.jpg

大纲


Redis 对外提供数据访问服务时,使用的是常驻内存的数据。为了在Redis Server重启之后数据还可以得到恢复,Redis具备将数据持久化到硬盘中的能力。

1 持久化的作用

5bcc39bf0001f29510000141.jpg

目录


5bcc39bf0001845010000446.jpg


5bcc39c00001612c10000483.jpg

持久化方式

2 RDB

Redis Server在有多db 中存储的key-value可以理解为Redis的一个状态
当发生写操作时,Redis就会从一个状态切换到另外一个状态
基于全量的持久化就是在某个时刻,将Redis的所有数据持久化到硬盘中,形成一个快照。当Redis 重启时,通过加载最近一个快照数据,可以将Redis 恢复至最近一次持久化状态上。

5bcc39c20001e11406710464.jpg

全量模式持久化


5bcc39c20001454b10000578.jpg


2.1 全量写入流程

包含2种方式:save 和 bgsave

5bcc39c20001e76010000628.jpg


save 可以由客户端显示触发,也可以在redis shutdown 时触发
save本身是单线程串行化的方式执行的,因此当数据量大时,有肯能会发生Redis Server的长时间卡顿。但是其备份期间不会有其他命令执行,因此备份时期 数据的状态始终是一致性

5bcc39c30001a21810000481.jpg


5bcc39c400019fd410000518.jpg

save-1


5bcc39c400010fb110000374.jpg

save-2


bgsave 也可以由


  • 客户端显示触发

  • 通过配置定时任务触发

  • 在master-slave的分布式结构下由slave节点触发

bgsave命令在执行的时候,会fork一个子进程。子进程提交完成之后,会立即给客户端返回响应,备份操作在后台异步执行,在此期间不会影响Redis的正常响应

对于bgsave来说,当父进程Fork完子进程之后,异步任务会将当前的内存状态作为一个版本进行复制
在复制过程中产生的变更,不会反映在这次备份当中

在Redis的默认配置当中,当满足下面任一条件时,会自动触发bgsave 的执行

配置secondschanges
save9001
save30010
save6010000

bgsave相对于save来说,其优势是异步执行,不影响后续的命令执行。但是Fork子进程时,涉及父进程的内存复制,此时会增加服务器的内存开销。当内存开销高到使用虚拟内存时,bgsave的Fork子进程会阻塞运行,可能会造成秒级的不可用。因此使用bgsave需要保证服务器空闲内存足够。

1000

bgsave-1


1000

bgsave-2


527

图示


命令savebgsave
IO类型同步异步
是否阻塞阻塞非阻塞(在fork是阻塞)
复杂度O(n)O(n)
优点不会消耗额外内存不阻塞客户端命令
缺点阻塞客户端命令需要Fork子进程,内存开销大

1000

不用命令,而使用配置


1000


1000

右边为最佳配置


1000


1000


940


导入大量数据


674


1000

执行save,查看生成的 RDB 文件


save 命令是阻塞式执行的!!!!!, save时无法进行其他命令操作!!!
接着验证 bgsave

1000


非阻塞式命令!!!

1000

使用子进程执行,结束时进程灭亡


1000

生产临时文件并替换更新 RDB 文件


1000

总结

2.2 恢复流程

当Redis重新启动时,会从本地磁盘加载之前持久化的文件。当恢复完成之后,再受理后续的请求操作。

3 增量模式的持久化(AOF)

1000

RDB 的缺点-1


1000

RDB 的缺点-2


1000


RDB记录的是每个状态的全量数据,而AOF(append-only-file)记录的则是每条写命令的记录,通过所有写命令的执行,最后恢复出最终的数据状态。其文件的生成如下所示:


671


1000

创建


1000

恢复

3.1 写入流程

1000

  • always:每一次刷新缓冲区,都会同步触发同步操作。因为每次的写操作都会触发同步,所以该策略会降低Redis的吞吐量,但是这种模式会拥有最高的容错能力。


    1000

    always

  • every second:每秒异步的触发同步操作,这种是Redis的默认配置。


    1000

    every second

  • no:由操作系统决定何时同步,这种方式Redis无法决定何时落地,因此不可控。


    1000

    no


    588

命令alwayseverysecno
优点不丢失数据每秒1次fsync,丢1秒数据无需设置
缺点IO开销大,一般的STAT盘只有几百TPS丢1秒数据不可控

3.2 回放流程

AOF的回放时机也是在机器启动时一旦存在AOF,Redis会选择增量回放
因为增量的持久化持续的写入磁盘,相比全量持久化,数据更加完整。回放的过程就是将AOF中存放的命令,重新执行一遍。完成之后再继续接受客户端的新命令。

AOF模式的优化重写

随着Redis 持续的运行,会有大量的增量数据append 到AOF 文件中。为了减小硬盘存储和加快恢复速度,Redis 通过rewrite 机制合并历史AOF 记录。如下所示:


1000


1000


1000


1000


1000


1000


1000


1000


1000


914


842


1000


1000


整个流程描述如下:

历史AOF:以快照的方式保存。

快照写入期间的增量:待快照写入完成之后append 到快照文件中。

后续的增量:写入新的AOF。

3 最终抉择及最佳实践

1000


1000


1000


1000


1000



作者:芥末无疆sss
链接:https://www.jianshu.com/p/5efef01a0e9f
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
手記
粉絲
85
獲贊與收藏
378

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消