掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流
Redis: 讓數(shù)據(jù)落地

Redis是一個(gè)快速、可擴(kuò)展的鍵值對(duì)存儲(chǔ)系統(tǒng),它提供了多種數(shù)據(jù)結(jié)構(gòu),包括字符串、哈希表、列表等,廣泛應(yīng)用于緩存、消息隊(duì)列、任務(wù)隊(duì)列等場(chǎng)景。然而,由于其內(nèi)存存儲(chǔ)的特性,Redis在運(yùn)行過(guò)程中如果遇到異常退出,所有數(shù)據(jù)都將丟失,這是一件非常嚴(yán)重的事情。本文將介紹如何通過(guò)Redis的數(shù)據(jù)持久化機(jī)制,讓數(shù)據(jù)落地,避免數(shù)據(jù)丟失的情況。
Redis數(shù)據(jù)持久化機(jī)制
Redis提供了兩種數(shù)據(jù)持久化機(jī)制,一種是RDB(Redis DataBase),即快照機(jī)制,另一種是AOF(Append Only File),即日志機(jī)制。
RDB機(jī)制實(shí)際上就是將Redis中的所有數(shù)據(jù)在指定時(shí)間間隔內(nèi)寫(xiě)入磁盤(pán),以保證數(shù)據(jù)的可靠性。RDB有兩種處理方式,一種是自動(dòng)觸發(fā)方式,一種是手動(dòng)觸發(fā)方式。自動(dòng)觸發(fā)方式需要配置save選項(xiàng),指定快照保存的時(shí)間間隔和修改的鍵數(shù)量,如下所示:
save 900 1 # 15分鐘內(nèi)至少有1個(gè)鍵被修改
save 300 10 # 5分鐘內(nèi)至少有10個(gè)鍵被修改
save 60 10000 # 1分鐘內(nèi)至少有10000個(gè)鍵被修改
手動(dòng)觸發(fā)方式則需要使用命令SAVE或BGSAVE進(jìn)行操作,其中SAVE命令會(huì)阻塞Redis服務(wù)器直到持久化完成,而B(niǎo)GSAVE命令則是異步執(zhí)行,不會(huì)阻塞服務(wù)器。需要注意的是,由于RDB是全量備份,因此在一個(gè)文件中存在多個(gè)快照,每次更新都需要完全重建一份新的快照,因此建議根據(jù)實(shí)際情況進(jìn)行調(diào)整。
而AOF機(jī)制則是將Redis執(zhí)行的每一條寫(xiě)命令以日志的形式追加到文件中,因此可以保證即使Redis異常退出,也可以通過(guò)重放日志文件來(lái)恢復(fù)數(shù)據(jù)。AOF有三種模式,一種是always模式,即每次操作都寫(xiě)入日志文件,保證了最大程度的數(shù)據(jù)完整性,但是磁盤(pán)IO開(kāi)銷(xiāo)較大;另一種是everysec模式,即每秒執(zhí)行一次日志寫(xiě)入操作,提高了數(shù)據(jù)寫(xiě)入效率,同時(shí)也會(huì)降低數(shù)據(jù)的安全性;最后一種是no模式,即不開(kāi)啟AOF機(jī)制。
AOF模式需要配置appendfsync選項(xiàng),指定寫(xiě)入的模式,可以設(shè)置為always、everysec和no,分別代表上述的三種模式。例如:
appendfsync always # 每次操作都同步寫(xiě)入日志
appendfsync everysec # 每秒鐘執(zhí)行一次寫(xiě)入操作
appendfsync no # 關(guān)閉AOF機(jī)制
如何選擇
選擇RDB還是AOF,要根據(jù)具體應(yīng)用場(chǎng)景來(lái)進(jìn)行選擇。
對(duì)于讀寫(xiě)比例大約是1:10或以上的場(chǎng)景,RDB做快照是一個(gè)不錯(cuò)的選擇,因?yàn)榭煺盏膶?xiě)入不存在額外IO壓力,同時(shí)快照恢復(fù)的速度也比AOF恢復(fù)速度快。
而對(duì)于讀寫(xiě)比例大約是1:1或更小的場(chǎng)景,AOF日志機(jī)制更加適合,因?yàn)樗梢员WC最小化的數(shù)據(jù)丟失,也不會(huì)有RDB重建快照的性能問(wèn)題。
在選擇一種數(shù)據(jù)持久化方式時(shí),需要深入了解自己應(yīng)用的特點(diǎn)和需求,然后根據(jù)實(shí)際情況進(jìn)行選擇。
示例
下面給出兩個(gè)示例,一個(gè)是啟用RDB持久化機(jī)制,一個(gè)是啟用AOF持久化機(jī)制。
使用RDB持久化機(jī)制
在配置文件redis.conf中添加以下內(nèi)容:
save 900 1 # 15分鐘內(nèi)至少有1個(gè)鍵被修改
save 300 10 # 5分鐘內(nèi)至少有10個(gè)鍵被修改
save 60 10000 # 1分鐘內(nèi)至少有10000個(gè)鍵被修改
dbfilename dump.rdb # 保存的快照文件名
dir /var/lib/redis # 保存快照的路徑
使用AOF持久化機(jī)制
在配置文件redis.conf中添加以下內(nèi)容:
appendonly yes # 開(kāi)啟AOF機(jī)制
appendfsync everysec # 每秒鐘執(zhí)行一次寫(xiě)入操作
appendfilename “appendonly.aof” # 日志文件名
dir /var/lib/redis # 保存快照的路徑
參考鏈接
1. Redis持久化: https://redis.io/topics/persistence
2. Redis配置: https://redis.io/topics/config
3. Redis實(shí)戰(zhàn): https://redislabs.com/redis-best-practices/
4. Redis數(shù)據(jù)類(lèi)型: https://redis.io/topics/data-types
成都服務(wù)器租用選創(chuàng)新互聯(lián),先試用再開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡(jiǎn)單好用,價(jià)格厚道的香港/美國(guó)云服務(wù)器和獨(dú)立服務(wù)器。物理服務(wù)器托管租用:四川成都、綿陽(yáng)、重慶、貴陽(yáng)機(jī)房服務(wù)器托管租用。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流