《如果Redis可以用到極致》要點(diǎn):
本文介紹了如果Redis可以用到極致,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
相對(duì)于memcache,redis擁有的持久化和多數(shù)據(jù)類型,非常適合應(yīng)用于互聯(lián)網(wǎng)社交、電商等業(yè)務(wù)較為復(fù)雜的系統(tǒng)中.
新浪微博是國(guó)內(nèi)最早(2010年)大規(guī)模線上Redis的實(shí)踐者,到目前已經(jīng)趨于極致.
可以看這篇干貨《用最少的機(jī)器支撐萬(wàn)億級(jí)拜訪,微博6年Redis優(yōu)化歷程》,我們能借鑒到如何避免大規(guī)模應(yīng)用redis時(shí),會(huì)碰到的問(wèn)題,如:
1、持久化內(nèi)存消耗導(dǎo)致服務(wù)崩潰.
2、主從同步全量加載問(wèn)題
3、版本升級(jí)的問(wèn)題
當(dāng)然,文中還提到了特定業(yè)務(wù)場(chǎng)景下的定制化應(yīng)用.
微博是從 2010 年開(kāi)始引入 Redis ,現(xiàn)在 Redis 已經(jīng)廣泛應(yīng)用于微博的多個(gè)業(yè)務(wù)場(chǎng)景,如關(guān)系、計(jì)數(shù)、通知提醒等,目前 Redis 集群存儲(chǔ)超過(guò)百億記錄,每天上萬(wàn)億的讀取拜訪.
持久化問(wèn)題
在我們大多數(shù)業(yè)務(wù)場(chǎng)景中 Redis 是當(dāng)做存儲(chǔ)來(lái)使用,會(huì)開(kāi)啟持久化機(jī)制.線上采用單機(jī)多實(shí)例的部署結(jié)構(gòu),服務(wù)器的內(nèi)存使用率也會(huì)比較高.
由于官方版本觸發(fā) bgsave 和 bgrewriteaof 操作的時(shí)間點(diǎn)是不可控的,依賴于相關(guān)的配置項(xiàng)和業(yè)務(wù)的寫入模型,因此可能會(huì)出現(xiàn)單機(jī)部署的多個(gè) Redis 實(shí)例同時(shí)觸發(fā) bgsave 或 bgrewriteaof 操作,這兩個(gè)操作都是通過(guò) fork 出一個(gè)子進(jìn)程來(lái)完成的,由于 copy-on-write 機(jī)制,可能會(huì)導(dǎo)致服務(wù)器內(nèi)存很快耗盡, Redis 服務(wù)崩潰.
此外在磁盤壓力較大時(shí)(生成 rdb、aof 重寫),對(duì) aof 的寫入及 fsync 操作可能會(huì)出現(xiàn)阻塞,雖然從 2.4 版本開(kāi)始 fsync 操作調(diào)整到 bio 線程來(lái)做,主線程 aof 的寫入阻塞仍會(huì)導(dǎo)致服務(wù)阻塞.
主從同步問(wèn)題
官方版本的主從同步機(jī)制,在網(wǎng)絡(luò)出現(xiàn)問(wèn)題時(shí)(如瞬斷),會(huì)導(dǎo)致主從重新進(jìn)行一次全量復(fù)制.
當(dāng)然官方 2.8 版本支持了 psync 增量復(fù)制的機(jī)制,一定程度上解決了主從連接斷開(kāi)會(huì)引發(fā)全量復(fù)制的問(wèn)題
版本升級(jí)及管理問(wèn)題
官方版本在執(zhí)行升級(jí)操作時(shí),需要服務(wù)重啟,我們大多數(shù)線上業(yè)務(wù)都開(kāi)啟了持久化機(jī)制,重啟操作耗時(shí)較長(zhǎng),加上使用 Redis 業(yè)務(wù)線比較多,版本升級(jí)操作的復(fù)雜度很高.
1. 對(duì)于持久化機(jī)制,采用 rdb + aof 的持久化方式.
aof 文件按固定大小滾動(dòng),生成 rdb 文件時(shí)記錄當(dāng)前 aof 的 position,全量的數(shù)據(jù)包含在 rdb 和所記錄位置點(diǎn)之后的 aof 文件,廢棄 aof 重寫機(jī)制,生成 rdb 后刪除無(wú)效的 aof 文件;增加了定時(shí)持久化操作的配置項(xiàng) cronsave,將單機(jī)部署的多個(gè) Redis 實(shí)例的持久化操作分散在不同的時(shí)間點(diǎn)進(jìn)行,并且錯(cuò)開(kāi)業(yè)務(wù)高峰;將對(duì) aof 的寫入操作也放到 bio 線程來(lái)做,解決磁盤壓力較大時(shí) Redis 阻塞的問(wèn)題.
2. 對(duì)于主從同步機(jī)制,借鑒 MySQL 的復(fù)制機(jī)制并做了簡(jiǎn)化.使用 rdb + aof 的方式,支持基于 aofpositon 的增量復(fù)制
================================
老楊有話說(shuō):
1、真的是業(yè)務(wù)需求推動(dòng)技術(shù)變革,技術(shù)只有持續(xù)優(yōu)化、改進(jìn),才能滿足業(yè)務(wù)發(fā)展需要,才能體現(xiàn)其價(jià)值.
2、即使是再優(yōu)秀的開(kāi)源產(chǎn)品,要拿來(lái)適配公司業(yè)務(wù),還是要深度探究和改進(jìn)才行.
3、官方提供的redis解決方案,足夠滿足中小型企業(yè)的技術(shù)要求,但是如何用到極致,還是需要優(yōu)秀的人才來(lái)打磨.
4、要持久話的數(shù)據(jù),能放到mysql就不要扔到redis,當(dāng)然,除非你對(duì)redis的持久化可以像上面他們做的一樣靠譜才行.
5、個(gè)人還是更傾向于redis的緩存模式和它的多數(shù)據(jù)結(jié)構(gòu).
封面人物介紹:
拉斯姆斯·勒多夫(Rasmus Lerdorf,1968年11月22日-)是一個(gè)丹麥程序員,他擁有加拿大國(guó)籍.他就是PHP他爹,PHP的創(chuàng)始人,其中PHP的頭兩個(gè)版本是由他編寫的,后來(lái)他也參與PHP后續(xù)版本的開(kāi)發(fā).
誰(shuí)會(huì)想到一個(gè)原本只是用來(lái)網(wǎng)頁(yè)拜訪跟蹤的工具,會(huì)發(fā)展成為世界上最好的語(yǔ)言,所以,沒(méi)事干了多寫寫代碼,萬(wàn)一被成功了呢?
《如果Redis可以用到極致》是否對(duì)您有啟發(fā),歡迎查看更多與《如果Redis可以用到極致》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/9223.html