了解redis性能常見(jiàn)問(wèn)題有哪些?這個(gè)問(wèn)題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見(jiàn)到的。希望通過(guò)這個(gè)問(wèn)題能讓你收獲頗深。下面是小編給大家?guī)?lái)的參考內(nèi)容,讓我們一起來(lái)看看吧!
成都創(chuàng)新互聯(lián)主要從事網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)仁化,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢(xún)建站服務(wù):028-86922220Master寫(xiě)內(nèi)存快照,save命令調(diào)度rdbSave函數(shù),會(huì)阻塞主線程的工作,當(dāng)快照比較大時(shí)對(duì)性能影響是非常大的,會(huì)間斷性暫停服務(wù),所以Master最好不要寫(xiě)內(nèi)存快照。
Master AOF持久化,如果不重寫(xiě)AOF文件,這個(gè)持久化方式對(duì)性能的影響是最小的,但是AOF文件會(huì)不斷增大,AOF文件過(guò)大會(huì)影響Master重啟的恢復(fù)速度。
Master調(diào)用BGREWRITEAOF重寫(xiě)AOF文件,AOF在重寫(xiě)的時(shí)候會(huì)占大量的CPU和內(nèi)存資源,導(dǎo)致服務(wù)load過(guò)高,出現(xiàn)短暫服務(wù)暫?,F(xiàn)象。
下面是我的一個(gè)實(shí)際項(xiàng)目的情況,大概情況是這樣的:
一個(gè)Master,4個(gè)Slave,沒(méi)有Sharding機(jī)制,僅是讀寫(xiě)分離,Master負(fù)責(zé)寫(xiě)入操作和AOF日志備份,AOF文件大概5G,Slave負(fù)責(zé)讀操作,當(dāng)Master調(diào)用BGREWRITEAOF時(shí),Master和Slave負(fù)載會(huì)突然陡增,Master的寫(xiě)入請(qǐng)求基本上都不響應(yīng)了,持續(xù)了大概5分鐘,Slave的讀請(qǐng)求過(guò)半也無(wú)法及時(shí)響應(yīng),上面的情況本來(lái)不會(huì)也不應(yīng)該發(fā)生的,是因?yàn)橐郧癕aster的這個(gè)機(jī)器是Slave,在上面有一個(gè)shell定時(shí)任務(wù)在每天的上午10點(diǎn)調(diào)用BGREWRITEAOF重寫(xiě)AOF文件,后來(lái)由于Master機(jī)器down了,就把備份的這個(gè)Slave切成Master了,但是這個(gè)定時(shí)任務(wù)忘記刪除了,就導(dǎo)致了上面悲劇情況的發(fā)生,原因還是找了幾天才找到的。
將no-appendfsync-on-rewrite的配置設(shè)為yes可以緩解這個(gè)問(wèn)題,設(shè)置為yes表示rewrite期間對(duì)新寫(xiě)操作不fsync,暫時(shí)存在內(nèi)存中,等rewrite完成后再寫(xiě)入。最好是不開(kāi)啟Master的AOF備份功能。
Redis主從復(fù)制的性能問(wèn)題,第一次Slave向Master同步的實(shí)現(xiàn)是:Slave向Master發(fā)出同步請(qǐng)求,Master先dump出rdb文件,然后將rdb文件全量傳輸給slave,然后Master把緩存的命令轉(zhuǎn)發(fā)給Slave,初次同步完成。第二次以及以后的同步實(shí)現(xiàn)是:Master將變量的快照直接實(shí)時(shí)依次發(fā)送給各個(gè)Slave。不管什么原因?qū)е耂lave和Master斷開(kāi)重連都會(huì)重復(fù)以上過(guò)程。Redis的主從復(fù)制是建立在內(nèi)存快照的持久化基礎(chǔ)上,只要有Slave就一定會(huì)有內(nèi)存快照發(fā)生。雖然Redis宣稱(chēng)主從復(fù)制無(wú)阻塞,但由于磁盤(pán)io的限制,如果Master快照文件比較大,那么dump會(huì)耗費(fèi)比較長(zhǎng)的時(shí)間,這個(gè)過(guò)程中Master可能無(wú)法響應(yīng)請(qǐng)求,也就是說(shuō)服務(wù)會(huì)中斷,對(duì)于關(guān)鍵服務(wù),這個(gè)后果也是很可怕的。
以上1.2.3.4根本問(wèn)題的原因都離不開(kāi)系統(tǒng)io瓶頸問(wèn)題,也就是硬盤(pán)讀寫(xiě)速度不夠快,主進(jìn)程 fsync()/write() 操作被阻塞。
單點(diǎn)故障問(wèn)題,由于目前Redis的主從復(fù)制還不夠成熟,所以存在明顯的單點(diǎn)故障問(wèn)題,這個(gè)目前只能自己做方案解決,如:主動(dòng)復(fù)制,Proxy實(shí)現(xiàn)Slave對(duì)Master的替換等,這個(gè)也是Redis作者目前比較優(yōu)先的任務(wù)之一。
感謝各位的閱讀!看完上述內(nèi)容,你們對(duì)redis性能常見(jiàn)問(wèn)題有哪些大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站制作公司行業(yè)資訊頻道。