Redis數(shù)據(jù)庫的使用場景介紹(避免誤用Redis)
Redis 是目前 NoSQL 領(lǐng)域的當(dāng)紅炸子雞,它象一把瑞士軍刀,小巧、鋒利、實(shí)用,特別適合解決一些使用傳統(tǒng)關(guān)系數(shù)據(jù)庫難以解決的問題。但是 Redis 不是銀彈,有很多適合它解決的問題,但是也有很多并不適合它解決的問題。另外,Redis 作為內(nèi)存數(shù)據(jù)庫,如果用在不適合的場合,對內(nèi)存的消耗是很可觀的,甚至?xí)屜到y(tǒng)難以承受。
我們可以對系統(tǒng)存儲(chǔ)使用的數(shù)據(jù)以兩種角度分類,一種是按數(shù)據(jù)的大小劃分,分成大數(shù)據(jù)和小數(shù)據(jù),另一種是按數(shù)據(jù)的冷熱程度劃分,分成冷數(shù)據(jù)和熱數(shù)據(jù),熱數(shù)據(jù)是指讀或?qū)懕容^頻繁的數(shù)據(jù),反之則是冷數(shù)據(jù)。
可以舉一些具體的例子來說明數(shù)據(jù)的大小和冷熱屬性。比如網(wǎng)站總的注冊用戶數(shù),這明顯是一個(gè)小而熱的數(shù)據(jù),小是因?yàn)檫@個(gè)數(shù)據(jù)只有一個(gè)值,熱是因?yàn)樽杂脩魯?shù)隨時(shí)間變化很頻繁。再比如,用戶最新訪問時(shí)間數(shù)據(jù),這是一個(gè)量比較大,冷熱不均的數(shù)據(jù),大是數(shù)據(jù)的粒度是用戶級別,每一個(gè)用戶都有數(shù)據(jù),如果有一千萬用戶,就意味著有一千萬的數(shù)據(jù),冷熱不均是因?yàn)榛钴S用戶的最新訪問時(shí)間變化很頻繁,但是可能有很大一部非活躍用戶訪問時(shí)間長時(shí)間不會(huì)發(fā)生變化。
大體而言,Redis 最適合處理的是小而熱,而且是寫頻繁,或者讀寫都比較頻繁的熱數(shù)據(jù)。對于大而熱的數(shù)據(jù),如果其它方式很難解決問題,也可以考慮使用 Redis 解決,但是一定要非常謹(jǐn)慎,防止數(shù)據(jù)無限膨脹。原因如下:
首先,對于冷數(shù)據(jù),無論大小,都不建議放在 Redis 中。Redis 數(shù)據(jù)要全部放在內(nèi)存中,資源寶貴,把冷數(shù)據(jù)放在其中實(shí)在是一種浪費(fèi),冷數(shù)據(jù)放在普通的存儲(chǔ)比如關(guān)系數(shù)據(jù)庫中就好了。
其次,對于熱數(shù)據(jù),尤其是寫頻繁的熱數(shù)據(jù),如果量比較小,是最適合放到 Redis 中的。比如上面提到的網(wǎng)站總的注冊用戶數(shù),就是典型的 Redis 用做計(jì)數(shù)器的例子。再比如論壇最新發(fā)表列表,最新報(bào)名列表,可以控制數(shù)量在幾百到一千的規(guī)模,也是典型的 redis 做最新列表的使用方式。
另外,對于量比較大的熱數(shù)據(jù)(或者冷熱不均數(shù)據(jù)),使用 Redis 時(shí)一定要比較謹(jǐn)慎。這種類型數(shù)據(jù)很容易引起數(shù)據(jù)膨脹,導(dǎo)致 Redis 消耗內(nèi)存巨大,讓系統(tǒng)難以承受。薄荷的一個(gè)慘痛教訓(xùn)是把用戶關(guān)注(以及被關(guān)注)數(shù)據(jù)放在 Redis 中,這是一種數(shù)據(jù)量極大,冷熱很不均衡的數(shù)據(jù),在幾百萬的用戶級別就占用了近 10 GB左右內(nèi)存,讓 Redis 變得難以應(yīng)付。應(yīng)對這種類型的數(shù)據(jù),可以用普通存儲(chǔ) + 緩存的方式。
如果用對了地方,比如在小而熱的數(shù)據(jù)情形,Redis 表現(xiàn)很棒,如果用錯(cuò)了地方,Redis 也會(huì)帶來昂貴的代價(jià),所以使用時(shí)務(wù)必謹(jǐn)慎。
相關(guān)文章
redis中使用redis-dump導(dǎo)出、導(dǎo)入、還原數(shù)據(jù)實(shí)例
這篇文章主要介紹了redis中使用redis-dump導(dǎo)出、導(dǎo)入、還原數(shù)據(jù)實(shí)例,本文直接給出操作命令,并給出注釋加以說明,需要的朋友可以參考下2014-11-11Redis概述及l(fā)inux安裝redis的詳細(xì)教程
這篇文章主要介紹了Redis概述及l(fā)inux安裝redis的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10Redis總結(jié)筆記(二):C#連接Redis簡單例子
這篇文章主要介紹了Redis總結(jié)筆記(二):C#連接Redis簡單例子,需要的朋友可以參考下2015-01-01通過redis的腳本lua如何實(shí)現(xiàn)搶紅包功能
這篇文章主要給大家介紹了關(guān)于通過redis的腳本lua如何實(shí)現(xiàn)搶紅包功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05Redis高級玩法之利用SortedSet實(shí)現(xiàn)多維度排序的方法
Redis的SortedSet是可以根據(jù)score進(jìn)行排序的,以手機(jī)應(yīng)用商店的熱門榜單排序?yàn)槔鶕?jù)下載量倒序排列。接下來通過本文給大家分享Redis高級玩法之利用SortedSet實(shí)現(xiàn)多維度排序的方法,一起看看吧2019-07-07RediSearch加RedisJSON大于Elasticsearch的搜索存儲(chǔ)引擎
這篇文章主要為大家介紹了RediSearch加RedisJSON大于Elasticsearch的王炸使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Redis配合SSDB實(shí)現(xiàn)持久化存儲(chǔ)代碼示例
這篇文章主要介紹了Redis配合SSDB實(shí)現(xiàn)持久化存儲(chǔ)代碼示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11