摘抄自知乎的redis相关
1.知乎日?qǐng)?bào)的基礎(chǔ)數(shù)據(jù)和統(tǒng)計(jì)信息是用 Redis 存儲(chǔ)的,這使得請(qǐng)求的平均響應(yīng)時(shí)間能在 10ms 以下。
其他數(shù)據(jù)仍然需要存放在另外的地方,其實(shí)完全用 Redis 也是可行的,主要的考量是內(nèi)存占用。
就使用經(jīng)驗(yàn)而言,Redis 的數(shù)據(jù)結(jié)構(gòu)很豐富,精心設(shè)計(jì)地話,能滿足很多應(yīng)用場(chǎng)景。至少很多時(shí)候比 MySQL 更方便
2.單獨(dú)使用Redis的話,它是成當(dāng)不起數(shù)據(jù)庫的任務(wù),比如你每日活躍用戶是1萬人,但是你那臺(tái)redis里面已經(jīng)積累了50萬人了(這個(gè)比例很正常),那么每次redis啟動(dòng),就需要把50萬load內(nèi)存,每次redis備份,又需要把50萬dump到磁盤,這靠譜么?
把冷數(shù)據(jù)落地到mongo,熱數(shù)據(jù)在用redis存儲(chǔ)。
3.redis是目前公認(rèn)的速度最快的基于內(nèi)存的鍵值對(duì)數(shù)據(jù)庫,但redis的缺點(diǎn)也非常明顯,僅提供最基本的hash set, list, sorted set等基于數(shù)據(jù)類型,不分表,沒有schema,沒有索引,沒有外鍵,缺少int/date等基本數(shù)據(jù)類型,多條件查詢需要通過集合內(nèi)聯(lián)(sinter,zinterstore)和連接間接實(shí)現(xiàn),操作不便,開發(fā)效率低,可維護(hù)性不佳; 因此一般不將其視為完整的數(shù)據(jù)庫單獨(dú)使用,很多網(wǎng)站將redis作為高速緩存和session狀態(tài)存儲(chǔ)層,然后再與其他數(shù)據(jù)庫搭配使用。
4.核心業(yè)務(wù)建議數(shù)據(jù)還是落地到mysql,redis在異常情況下回丟數(shù)據(jù)。
非核心業(yè)務(wù),比如運(yùn)營推廣,數(shù)據(jù)聚合統(tǒng)計(jì)這種允許數(shù)據(jù)少量丟失的業(yè)務(wù)可以全用mysql,擴(kuò)展方便,效率高,業(yè)務(wù)量也不大。特別是運(yùn)營推廣這種時(shí)效性很強(qiáng)的業(yè)務(wù),在推廣結(jié)束后數(shù)據(jù)接沒用了,Redis內(nèi)存壓力也不會(huì)很大。
mysql能支持對(duì)各個(gè)字段的查詢,Redis的查詢僅限于對(duì)key的簡(jiǎn)單匹配,如果要對(duì)value進(jìn)行復(fù)雜查詢,不適合用Redis。
5.目前redis做數(shù)據(jù)庫還不太靠譜。它支持的數(shù)據(jù)類型太少,而且查詢功能太弱。redis并不是為了作為數(shù)據(jù)庫使用的,它更多地是一個(gè)高速存取器,一般用作緩存和類似場(chǎng)景。
6.redis是一種k/v的內(nèi)存數(shù)據(jù)庫,適合小數(shù)據(jù)量的存儲(chǔ)以及實(shí)時(shí)要求高的地方,但是不適合做完整數(shù)據(jù)庫,完整數(shù)據(jù)庫基本上都有一套詳細(xì)解決方案,比如mysql。
我們項(xiàng)目里用到的redis是用來做緩存的,設(shè)置過期時(shí)間,到時(shí)就自動(dòng)清掉。數(shù)據(jù)庫還是用mysql等這種成熟的方案。
如果你非要用一種nosql來做數(shù)據(jù)庫,推薦你用Mongodb
7.redis能否做數(shù)據(jù)庫用取決于如下幾個(gè)條件:
1:數(shù)據(jù)量,畢竟內(nèi)存數(shù)據(jù)庫,還是受限于內(nèi)存的容量,雖然可以redis可以持久化。
2:數(shù)據(jù)的結(jié)構(gòu),是否能夠?qū)㈥P(guān)系型數(shù)據(jù)結(jié)構(gòu)都轉(zhuǎn)換為key/value的形式。
3:查詢的效率,對(duì)范圍查詢等,是否能轉(zhuǎn)換為高效的hash索引查詢
8.MongoDB不是內(nèi)存型數(shù)據(jù)庫,他只不過把所有文件索引存到內(nèi)存里而已。同樣的機(jī)型,用MongoDB會(huì)比Redis存更多,但Redis響應(yīng)更快。關(guān)鍵的是看量有多大。
9.MongoDB是nosql數(shù)據(jù)庫,它支持把一部分熱數(shù)據(jù)放到內(nèi)存中,方便用戶更快的去處理它。
Redis是內(nèi)存型數(shù)據(jù)庫,是完全的內(nèi)存數(shù)據(jù)庫!所有的數(shù)據(jù)都在內(nèi)存,不存在硬盤一部分,內(nèi)存一部分的情況。當(dāng)然可以用save去存數(shù)據(jù)到硬盤,但這是為了備份安全性考慮而不是使用。
10.一個(gè)哈希實(shí)際上是一組鍵值對(duì)的集合,哈希本身的鍵是“父鍵”,哈希中包含的若干字段是“子鍵”,每個(gè)“子鍵”都有相應(yīng)的值。“子鍵”之間并沒有一定的聯(lián)系,但是它們共同組成了一個(gè)完整的哈希結(jié)構(gòu)。我們可以把一個(gè)哈希看做關(guān)系數(shù)據(jù)庫中的一行,哈希的每個(gè)子鍵對(duì)應(yīng)行的一個(gè)字段。因此,當(dāng)把關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)緩存至Redis時(shí),使用哈希結(jié)構(gòu)可能會(huì)帶來方便。需要注意的是,哈希結(jié)構(gòu)內(nèi)部的子鍵之間是沒有順序關(guān)系的。
11.Redis是一種內(nèi)存數(shù)據(jù)庫,這使其在數(shù)據(jù)存取效率方面表現(xiàn)突出。由于內(nèi)存中的數(shù)據(jù)時(shí)刻面臨丟失的危險(xiǎn),Redis提供了兩種持久化機(jī)制,及時(shí)將內(nèi)存中的數(shù)據(jù)寫入硬盤。第一種機(jī)制為RDB,利用存儲(chǔ)快照的方式把內(nèi)存數(shù)據(jù)定期寫入硬盤;第二種機(jī)制為AOF,利用寫日志的方式,每執(zhí)行一條更改Redis數(shù)據(jù)的命令,就在日志里附加上該命令并保存在硬盤上。Redis默認(rèn)開啟RDB模式,關(guān)閉AOF模式,這是因?yàn)锳OF更加耗時(shí)。但是,如果對(duì)數(shù)據(jù)安全要求極高,無法承擔(dān)任何數(shù)據(jù)丟失的后果,AOF模式就變成了持久化的首選。
當(dāng)然,即使Redis具備持久化機(jī)制,但是一旦本地硬盤損壞,數(shù)據(jù)丟失依然在所難免。所以,Redis又提供了復(fù)制功能,作用是將一個(gè)主數(shù)據(jù)庫(master)的數(shù)據(jù)自動(dòng)同步到多個(gè)從數(shù)據(jù)庫(slave),從而盡可能防止數(shù)據(jù)丟失。Redis主從機(jī)制可以簡(jiǎn)單描述為:從數(shù)據(jù)庫啟動(dòng)后,先向主數(shù)據(jù)庫發(fā)送SYNC命令;主數(shù)據(jù)庫接到SYNC命令后就開始保存快照,在此期間,所有發(fā)給主數(shù)據(jù)庫的命令都被緩存起來;快照保存完成后,主數(shù)據(jù)庫把快照和緩存的命令一起發(fā)給從數(shù)據(jù)庫;從數(shù)據(jù)庫保存主數(shù)據(jù)庫發(fā)來的快照文件,并依次執(zhí)行主數(shù)據(jù)庫發(fā)來的緩存命令。在同步過程中,從數(shù)據(jù)庫不會(huì)阻塞,它默認(rèn)使用同步之前的數(shù)據(jù)繼續(xù)響應(yīng)客戶端發(fā)來的命令。
轉(zhuǎn)載于:https://www.cnblogs.com/wan-wu-sheng/p/6994275.html
總結(jié)
以上是生活随笔為你收集整理的摘抄自知乎的redis相关的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【bzoj1597- [Usaco200
- 下一篇: 杭州某知名xxxx公司急招大量java以