當(dāng)你學(xué)完P(guān)ython并到工作時(shí),你肯定會(huì)遇到一些不知道如何回答的問題,比如關(guān)于Redis的問題。而最近也有不少網(wǎng)友針對(duì)這類問題咨詢了小編,我整理了一篇關(guān)于這方面的文章,希望對(duì)大家有所幫助。
如何解決Redis宕機(jī)?
宕機(jī):服務(wù)器停止服務(wù)
如果只有一個(gè)redis,肯定會(huì)造成數(shù)據(jù)丟失,無法保存;如果有多個(gè)redis或者redis集群,宕機(jī)則需要分為在主從模式下區(qū)分來看:
slave從redis宕機(jī),redis是在配置主從復(fù)制的時(shí)候配置的。slave會(huì)從master的redis中讀取master的redis操作日志1。庫在redis中重啟后,會(huì)自動(dòng)添加到主從架構(gòu)中,自動(dòng)完成數(shù)據(jù)的同步;
如果從庫實(shí)現(xiàn)了持久化,此時(shí)不要立即重啟服務(wù),否則可能導(dǎo)致數(shù)據(jù)丟失。正確操作如下:對(duì)slave數(shù)據(jù)執(zhí)行SLAVEOFONONE,斷開主從關(guān)系,將slave升級(jí)到master庫,此時(shí)重啟主庫,執(zhí)行SLAVEOF,設(shè)置為從庫,連接主redis進(jìn)行主從復(fù)制,自動(dòng)備份數(shù)據(jù)。
以上過程容易配置錯(cuò)誤,可以使用redis提供的sentinel機(jī)制來簡(jiǎn)化以上操作。簡(jiǎn)單的方法:redis的哨兵功能。
Redis集群解決方案怎么做?有哪些解決方案?
1.Codis目前使用最多的集群方案,效果和twemproxy基本一樣,但是支持在節(jié)點(diǎn)數(shù)變化時(shí)將舊節(jié)點(diǎn)數(shù)恢復(fù)到新的hash節(jié)點(diǎn)。
2、rediscluster3.0自帶的集群特點(diǎn)是它的分布式算法不是一致性hash,而是hashslot的概念,并且本身支持node設(shè)置slave節(jié)點(diǎn)。
3、在業(yè)務(wù)代碼層,設(shè)置幾個(gè)不相關(guān)的redis實(shí)例,在代碼層,對(duì)key進(jìn)行hash計(jì)算,然后去對(duì)應(yīng)的redis實(shí)例對(duì)數(shù)據(jù)進(jìn)行操作。這種方式對(duì)hash層代碼要求比較高,一些考慮包括節(jié)點(diǎn)故障后的替代算法方案、數(shù)據(jù)沖擊后的字典腳本恢復(fù)、實(shí)例監(jiān)控等。
Redis回收過程是如何工作的?
客戶端運(yùn)行了一個(gè)新命令并添加了新數(shù)據(jù)。
redis檢查內(nèi)存使用情況,如果大于maxmemory限制,會(huì)按照設(shè)置的策略回收。
一個(gè)新的命令被執(zhí)行等等,所以我們不斷地跨越內(nèi)存限制的邊界,通過不斷地到達(dá)邊界然后不斷地回收回到邊界之下。如果一個(gè)命令的結(jié)果導(dǎo)致大量?jī)?nèi)存被使用(例如,一個(gè)大集合的交集被保存到一個(gè)新的鍵),那么這個(gè)內(nèi)存限制就會(huì)被這個(gè)內(nèi)存使用量超越。