redis的兩種持久化方式有什么缺點?

這篇文章主要為大家詳細介紹了redis的兩種持久化方式的缺點,圖文詳解容易學習,配合代碼閱讀理解效果更佳,感興趣的小伙伴們可以參考一下。

創(chuàng)新互聯(lián)2013年至今,先為烏拉特中等服務建站,烏拉特中等地企業(yè),進行企業(yè)商務咨詢服務。為烏拉特中企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。

一、RDB持久化模式缺陷

1、問題描述:

并發(fā)200路,模擬不斷寫Redis,持續(xù)4小時后,接口調(diào)用開始出現(xiàn)大量失敗,錯誤信息如下:

{"data":{"sendResult":null},"base":{"returncode":"99999","returndesc":"系統(tǒng)異常:MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error."},"qrybase":{"total":0,"count":0,"start":0}}

2、原因分析:

解讀錯誤信息,以為是磁盤不夠用引起,結(jié)果發(fā)現(xiàn)磁盤還剩余42%,如下所示:

redis的兩種持久化方式有什么缺點?

于是根據(jù)錯誤信息提示開啟Redis日志,繼續(xù)壓測,接口依然報錯,但可從Redis日志信息中

Can’t save in background: fork: Cannot allocate memory

進程使用內(nèi)存不當有關,查看Redis主進程占用內(nèi)存如下:占用近55%*4G內(nèi)存

redis的兩種持久化方式有什么缺點?

具體原因:Redis在保存數(shù)據(jù)到硬盤時為了避免主進程假死,需要Fork一份主進程,然后在Fork進程內(nèi)完成數(shù)據(jù)保存到硬盤的操作,如果主進程使用了2.2GB的內(nèi)存,F(xiàn)ork子進程的時候需要額外的2.2GB,此時內(nèi)存就不夠了,F(xiàn)ork失敗,進而數(shù)據(jù)保存硬盤也失敗了。

3、緩解方案(不能根本解決問題):

3.1 修改redis.conf文件中配置項stop-writes-on-bgsave-error no (默認值為yes),即當bgsave快照操作出錯時停止寫數(shù)據(jù)到磁盤,這樣后面寫錯做均會失敗,為了不影響后續(xù)寫操作,故需將該項值改為no

3.2 修改內(nèi)核參數(shù)(如下3種方式),但需要root權(quán)限:

(1)	編輯/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p 使配置文件生效
(2)sysctl vm.overcommit_memory=1
(3)echo 1 > /proc/sys/vm/overcommit_memory

二、AOF持久化模式缺陷

1、問題1描述:

Redis主從節(jié)點均開啟AOF模式,并發(fā)200路,模擬不斷寫Redis,持續(xù)15分鐘后,接口調(diào)用開始出現(xiàn)大量失敗,且Redis所在的Linux虛擬服務器掛起。

接口報錯如下:

{"data":null,"base":{"returndesc":"系統(tǒng)異常","returncode":"999999"},"qrybase":null}
Biz(dubbo)接口報錯如下:
2015-06-05 11:28:28.760 [DubboServerHandler-X.X.X.X:20882-thread-173] ERROR  - error while validate jedis!
redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out

原因分析:

從dubbo接口報錯信息來看,是由于接口API操作Redis超時導致。從系統(tǒng)日志和IO監(jiān)控來看,均說明上述問題是由于IO瓶頸(系統(tǒng)IO過于繁忙)所致,如下所示:

redis的兩種持久化方式有什么缺點?

redis的兩種持久化方式有什么缺點?

從系統(tǒng)日志也能看出,IO阻塞時間超過了120秒,由于系統(tǒng)安全機制導致機器掛起。

總結(jié)

測試結(jié)果證明AOF模式存在最明顯缺陷,即訪問壓力大時IO會成為性能瓶頸,進而導致服務不可用。

3、緩解方案(不能根本解決問題)

編輯/etc/sysctl.conf ,添加如下配置:

vm.dirty_background_ratio = 5
vm.dirty_ratio = 10

然后sysctl -p 使配置文件生效。

問題2描述:

無論采用AOF模式還是RDB(快照模式),當兩文件(.aof或.rdb)大小超過系統(tǒng)內(nèi)存80%,Redis進程會被系統(tǒng)Kill掉,導致服務不可用。

以上就是redis兩種持久化方式的缺點的匯總,內(nèi)容較為全面,小編相信有部分知識點可能是我們?nèi)粘9ぷ骺赡軙姷交蛴玫降?。希望你能通過這篇文章學到更多知識。

網(wǎng)頁名稱:redis的兩種持久化方式有什么缺點?
網(wǎng)站鏈接:http://bm7419.com/article10/pcdogo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設、外貿(mào)建站、用戶體驗、品牌網(wǎng)站制作、外貿(mào)網(wǎng)站建設網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名