新聞中心
海量數(shù)據(jù)下如何正確訪問Redis服務(wù)才不會掛掉?
要保證Redis不會掛掉,也就是提高Redis的高可用性,可以從這么幾個方面考慮。

Redis單副本:也就是只部署一臺Redis,不需要節(jié)點之間的數(shù)據(jù)同步,架構(gòu)簡單,部署方便;但是單臺機(jī)器畢竟是有風(fēng)險的,按照題目中【海量數(shù)據(jù)】的場景,是不能達(dá)到高可用要求的。
Redis主從:主從實例可以部署在不同的物理服務(wù)器上,充分利用多臺服務(wù)器的資源,在主庫發(fā)生故障的時候,可以進(jìn)行主備切換,從而保證系統(tǒng)的穩(wěn)定運行,甚至可以做到讀寫分離,主庫專門用作寫操作,一臺或多臺備庫進(jìn)行讀操作;但是當(dāng)主庫發(fā)生故障的時候(如果沒有HA方案的話),是需要手動進(jìn)行主備切換的。
Redis Sentinel:部署架構(gòu)分為兩部分【Sentinel集群】和【數(shù)據(jù)集群】;Sentinel集群是由多個Sentinel節(jié)點組成的分布式集群,通常是2N+1臺服務(wù)器,可以實現(xiàn)故障發(fā)現(xiàn)和轉(zhuǎn)移、客戶端通知等功能;數(shù)據(jù)集群用于存儲數(shù)據(jù);它能夠解決主從模式下的自動切換問題,并且數(shù)據(jù)集群是可以橫向擴(kuò)展的;當(dāng)然這個架構(gòu)實現(xiàn)和部署起來,也更為復(fù)雜一些;并且這個架構(gòu)不能做到讀寫分離。
Redis Cluster:Redis 3.0集群,是分布式集群解決方案之一,物理架構(gòu)中配置2N個節(jié)點(主從一一對應(yīng)),主節(jié)點提供讀寫操作,從節(jié)點作為備份;數(shù)據(jù)分布保存在多個節(jié)點上,是一種無中心的架構(gòu),如果有部分節(jié)點發(fā)生故障,能夠?qū)崿F(xiàn)故障自動轉(zhuǎn)移和切換,用投票機(jī)制完成備庫升級為主庫(下文的Redis分片章節(jié),還會介紹到Redis Cluster)。
海量數(shù)據(jù)下正確的訪問redis要注意的事情有很多,基本上可以從服務(wù)治理,數(shù)據(jù),redis正確使用三個方面來講。
既然是海量數(shù)據(jù),那么服務(wù)肯定要拆分成多個服務(wù),最常見的采用“大中臺,小前臺”的概念,中臺分各個服務(wù)中心,各個中心去維護(hù)自己中心負(fù)責(zé)的服務(wù),向上游前臺提供數(shù)據(jù)和服務(wù)。比如一個做內(nèi)容付費的公司可以有內(nèi)容中心、商品中心、交易中心
用戶中心、促銷中心、基礎(chǔ)中心、開放平臺等,中心之間采用RPC通信或者數(shù)據(jù)共享。
在做好服務(wù)治理和數(shù)據(jù)劃分的基礎(chǔ)上,這個時候就是重點講如何正確使用redis的時候了,個人列舉了部分細(xì)則僅供大家參考:
熟練使用五種數(shù)據(jù)結(jié)構(gòu)(String、Set|、Hash、List、ZSet)以及每種數(shù)據(jù)結(jié)構(gòu)的適用場景和注意事項;
防止緩存雪崩,即避免大批量緩存同一時間段集中過期,導(dǎo)致大量請求都懟到數(shù)據(jù)庫上,導(dǎo)致數(shù)據(jù)庫連接數(shù)爆滿、宕機(jī);
防止緩存穿透,避免redis中熱點key存入了null或者不存在,導(dǎo)致大量請求繞過redis請求數(shù)據(jù)庫去了;
避免大key的存在:比如一個redis集群是16G,共8個節(jié)點,每個節(jié)點平均分配2G的內(nèi)存,這時候如果有一個大的hash key占用內(nèi)存超過2G了,這個時候盡管集群還有剩余的空間,這個大key的寫入依舊會失敗,單個key是無法做到集群的,另外再想想如果一個hash存儲了大量的數(shù)據(jù),考慮一下性能問題?
禁止使用keys、flushall、flushdb等,運維同學(xué)通過redis的rename機(jī)制禁掉命令,或者使用scan的方式漸進(jìn)式處理;
批量讀寫redis請采用pipeline管道的方式;
如何評估數(shù)據(jù)適不適合放入Redis中?
會話緩存
Redis最明顯的用例之一是將其用作會話緩存。與其他會話存儲(例如Memcached)相比,使用Redis的優(yōu)勢在于Redis提供了持久性。盡管就一致性而言,維護(hù)高速緩存通常不是關(guān)鍵任務(wù),但如果所有購物車會話都消失了,大多數(shù)用戶將不會完全滿意,現(xiàn)在他們會嗎?
幸運的是,隨著Redis多年來的發(fā)展,很容易找到有關(guān)如何正確使用Redis進(jìn)行會話緩存的文檔。甚至著名的電子商務(wù)平臺Magento都有Redis的插件!
在基本會話令牌之外,Redis提供了一個非常易于操作的FPC平臺。即使在重新啟動Redis實例時,也可以恢復(fù)一致性,而磁盤持久性不會使用戶看到頁面加載速度的降低,這是非常麻煩的從類似PHP的本地FPC更改。
再次以Magento為例,Magento提供了一個插件,可將Redis用作全頁緩存后端。
同樣,對于在那里的WordPress用戶,WordPress有一個名為wp-redis的超贊插件,可幫助您實現(xiàn)前所未有的最快頁面加載速度!
利用Redis的內(nèi)存存儲引擎來執(zhí)行列表和設(shè)置操作,使其成為用于消息隊列的絕佳平臺。對于習(xí)慣使用Redis進(jìn)行推入/彈出操作與Python等編程語言中的列表進(jìn)行交互的人,應(yīng)該感到與Redis作為隊列進(jìn)行交互。
如果您對“ Redis隊列”進(jìn)行快速的Google搜索,您很快就會發(fā)現(xiàn)那里有大量的開源項目,這些項目旨在使Redis成為滿足所有排隊需求的出色后端實用程序。舉例來說,Celery的后端就是使用Redis作為代理。
還有就是Redis的發(fā)布/訂閱功能。Pub / Sub的用例確實是無限的。我見過人們將其用于社交網(wǎng)絡(luò)連接,基于Pub / Sub事件觸發(fā)腳本,甚至使用Redis Pub / Sub構(gòu)建的聊天系統(tǒng)!
到此,以上就是小編對于redis關(guān)閉只讀模式的問題就介紹到這了,希望這2點解答對大家有用。
網(wǎng)站標(biāo)題:海量數(shù)據(jù)下如何正確訪問Redis服務(wù)才不會掛掉?(redis怎么禁止全部查看)
文章網(wǎng)址:http://www.dlmjj.cn/article/ccscpii.html


咨詢
建站咨詢
