php使用redis持久化,redis如何持久化
由于Redis的數(shù)據(jù)都存放在內(nèi)存中,如果沒有配置持久化,redis重啟后數(shù)據(jù)就全丟失了,于是需要開啟redis的持久化功能,將數(shù)據(jù)保存到磁 盤上,當(dāng)redis重啟后,可以從磁盤中恢復(fù)數(shù)據(jù)。
redis提供兩種方式進(jìn)行持久化,一種是RDB持久化(原理是將Reids在內(nèi)存中的數(shù)據(jù)庫記錄定時(shí) dump到磁盤上的RDB持久化),另外一種是AOF(append only file)持久化(原理是將Reids的操作日志以追加的方式寫入文件)。
RDB:RDB持久化是把當(dāng)前進(jìn)程數(shù)據(jù)生成快照保存到硬盤的過程,觸發(fā)RDB持久化過程分為手動(dòng)觸發(fā)和自動(dòng)觸發(fā)。 (推薦學(xué)習(xí):Redis視頻教程)
觸發(fā)機(jī)制
手動(dòng)觸發(fā)分別對(duì)應(yīng)save和bgsave命令
save命令:阻塞當(dāng)前Redis服務(wù)器,知道RDB過程完成為止,對(duì)于內(nèi)存比較大的實(shí)例會(huì)造成長(zhǎng)時(shí)間阻塞,線上不建議使用。DB saved on disk
bgseve命令:Redis進(jìn)程執(zhí)行fork操作創(chuàng)建子進(jìn)程,RDB持久化過程有子進(jìn)程負(fù)責(zé),完成后自動(dòng)結(jié)束。阻塞只發(fā)生在fork階段,一般時(shí)間很短。* Background saving started by pid 3151
* DB saved on disk
* RDB: 0 MB of memory used by copy-on-write
* Background saving terminated with success
自動(dòng)觸發(fā)
以下場(chǎng)景下會(huì)觸發(fā)
1)使用save相關(guān)配置,如“save m n”。表示m秒內(nèi)數(shù)據(jù)集存在n次修改時(shí),自動(dòng)觸發(fā)bgsave。
2)如果從節(jié)點(diǎn)執(zhí)行全量復(fù)制操作,主節(jié)點(diǎn)自動(dòng)執(zhí)行bgsave生成RDB文件并發(fā)送給從節(jié)點(diǎn)。
3)執(zhí)行debug reload命令重新加載Redis時(shí),也會(huì)自動(dòng)觸發(fā)save操作。
4)默認(rèn)情況下執(zhí)行shutdown命令時(shí),如果沒有開啟AOF持久化功能則自動(dòng)執(zhí)行bgsave。
AOF:以獨(dú)立日志的方式記錄每次寫命令,重啟時(shí)在重新執(zhí)行AOF文件中的命令達(dá)到恢復(fù)數(shù)據(jù)的目的。主要作用:解決了數(shù)據(jù)持久化的實(shí)時(shí)性。
使用AOF
開啟AOF功能需要設(shè)置配置:appendonly yes,默認(rèn)不開啟。文件名通過appendfilename配置設(shè)置,默認(rèn)appendonly.aof。
1)所有的寫入命令會(huì)追加到aof_buf(緩沖區(qū))中。
2)AOF緩沖區(qū)根據(jù)對(duì)應(yīng)的策略向硬盤做同步操作。
3)隨著AOF文件越來越大,需要定期對(duì)AOF文件進(jìn)行重寫,達(dá)到壓縮的目的。
4)當(dāng)Redis服務(wù)器重啟時(shí),可以加載AOF文件進(jìn)行數(shù)據(jù)恢復(fù)。
更多Redis相關(guān)技術(shù)文章,請(qǐng)?jiān)L問Redis入門教程欄目進(jìn)行學(xué)習(xí)!
總結(jié)
以上是生活随笔為你收集整理的php使用redis持久化,redis如何持久化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 典型环节的matlab仿真分析,典型环节
- 下一篇: php 注册树,php常用设计模式(单例