Redis存儲及Cache需求的驚人性能
Redis擁有卓越的性能,令國內(nèi)前十大網(wǎng)站的子產(chǎn)品只需1臺Redis就能滿足存儲及Cache的需求。然而,業(yè)界對于Redis的認(rèn)識中存在著一些誤區(qū),本文將探討這些觀點。 Redis的獨(dú)特設(shè)計與優(yōu)勢Re
Redis擁有卓越的性能,令國內(nèi)前十大網(wǎng)站的子產(chǎn)品只需1臺Redis就能滿足存儲及Cache的需求。然而,業(yè)界對于Redis的認(rèn)識中存在著一些誤區(qū),本文將探討這些觀點。
Redis的獨(dú)特設(shè)計與優(yōu)勢
Redis在內(nèi)存中設(shè)計了多種數(shù)據(jù)類型,使得業(yè)務(wù)能夠高速、原子地訪問這些數(shù)據(jù)結(jié)構(gòu),而且無需關(guān)心持久存儲的問題。從架構(gòu)上看,Redis解決了以往存儲需要繞過一些障礙的問題。
Redis超越Memcache的性能優(yōu)勢
有開發(fā)者認(rèn)為Redis不可能比Memcached更快,因為Memcached完全基于內(nèi)存,而Redis具備持久保存特性。即便是異步的,Redis也不應(yīng)該比Memcached更快才對。但測試結(jié)果卻顯示Redis幾乎總是占據(jù)絕對優(yōu)勢。
單臺Redis存儲數(shù)據(jù)的合理性考量
盡管Redis的數(shù)據(jù)全部存儲在內(nèi)存中能帶來高速性能,但也存在一些不太合理的地方。例如,一個中型網(wǎng)站有100萬注冊用戶,若要用Redis存儲這些數(shù)據(jù),內(nèi)存容量必須足夠容納所有這些用戶數(shù)據(jù)。然而實際業(yè)務(wù)情況下,活躍用戶可能只有5萬,1周內(nèi)訪問過1次的用戶可能只有15萬。因此,將所有100萬用戶數(shù)據(jù)都放入內(nèi)存顯得有些不合理,RAM需為“冷數(shù)據(jù)”買單。
Redis的VM實現(xiàn)與輪子重復(fù)制造
Redis的VM實現(xiàn)遵循之前的epoll實現(xiàn)思路,仍然是自主實現(xiàn)。然而,在前述操作系統(tǒng)介紹中,提到操作系統(tǒng)可以自動幫助程序?qū)崿F(xiàn)熱數(shù)據(jù)與冷數(shù)據(jù)分離,Redis只需向操作系統(tǒng)申請一塊大內(nèi)存,操作系統(tǒng)會自動將熱數(shù)據(jù)存放于物理內(nèi)存,而將冷數(shù)據(jù)交換至硬盤。Varnish這一知名的“理解了現(xiàn)代操作系統(tǒng)”的實踐便是如此,取得了巨大成功。
最優(yōu)化使用Redis的方法
許多開發(fā)者天然傾向于使用set/get方式來操作Redis作為key-value存儲。然而,這并非最佳的使用方法。特別在未啟用VM的情況下,Redis需要將全部數(shù)據(jù)存入內(nèi)存,因此節(jié)省內(nèi)存顯得尤為重要。
使用AOF替代快照功能的合理性
Redis有兩種存儲方式,默認(rèn)采用快照方式,即定期將內(nèi)存快照持久化到硬盤。然而,這種方式的缺陷在于若出現(xiàn)崩潰,則可能丟失部分?jǐn)?shù)據(jù)。出于追求完美的動機(jī),作者增加了AOF方式。AOF即追加模式,它將操作命令保存到日志文件。然而,在一個并發(fā)修改頻繁的系統(tǒng)中,命令日志會變得非常龐大,管理和維護(hù)成本也會極高,而且恢復(fù)重建時間會變得很長。這樣做導(dǎo)致AOF失去了高可用性的初衷。另外,Redis作為內(nèi)存數(shù)據(jù)結(jié)構(gòu)模型,其所有優(yōu)勢都建立在對內(nèi)存復(fù)雜數(shù)據(jù)結(jié)構(gòu)高效的原子操作上,所以AOF顯得有些不協(xié)調(diào)。
新深度解析Redis優(yōu)化與誤區(qū)解讀