新聞中心
redis為什么把數(shù)據(jù)放到內(nèi)存中?
這個問題問得有問題??!

10年積累的網(wǎng)站建設(shè)、做網(wǎng)站經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先建設(shè)網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有敖漢免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
首先,redis確實是一個內(nèi)存型的數(shù)據(jù)庫系統(tǒng),把大量數(shù)據(jù)在內(nèi)存中使用,并快速存取,但是,redis提供了以數(shù)據(jù)庫文件的方式持久化數(shù)據(jù)的選擇,通過使用bgsave,save等命令,可以把緩存中的數(shù)據(jù)存儲到磁盤中進(jìn)行永久性保存!
把題目換種問法!為什么內(nèi)存讀取比磁盤讀取數(shù)據(jù)速度快?
1,內(nèi)存是電器元件,利用高低電平存儲數(shù)據(jù),而磁盤是機(jī)械元件(去買電腦的時候?qū)懼?400r/min或者7200r/min),電氣原件速度超級快,而磁盤因為在每個磁盤塊切換的時候,磁頭會消耗比較多的時間,也就是IO時間長,所以性能沒發(fā)比!
2,磁盤的數(shù)據(jù)進(jìn)行操作的時候也都是讀取到內(nèi)存中,由CPU進(jìn)行操作的,所以直接放在內(nèi)存中的數(shù)據(jù),讀取速度肯定快了很多很多!
那么內(nèi)存有哪些缺點呢?
1,丟數(shù)據(jù):內(nèi)存因為是存儲的高低電平,斷電之后數(shù)據(jù)全部丟失,而磁盤存儲了二進(jìn)制文件,斷電以后數(shù)據(jù)依然存在!
2,內(nèi)存貴:一塊4G的內(nèi)存和一個500g的磁盤價格差不多,因為內(nèi)存設(shè)計工藝要求更高,材料也更加昂貴!
所以,不僅僅是redis,幾乎所有的緩存系統(tǒng)都會先用到內(nèi)存作為數(shù)據(jù)快速讀取的基本保證,然后才能有擴(kuò)展數(shù)據(jù)持久化的可能!
redis作為分布式的可持久化的單線程的key-value緩存系統(tǒng),有著大量的優(yōu)點,吸引著廣大開發(fā)者的關(guān)注,同時在保證數(shù)據(jù)一致性等問題上通常作為首選條件!
當(dāng)然是為了讀取快呀。Redis誕生之后,就被作為memcached接班人而寄予厚望,而不是做數(shù)據(jù)持久層的產(chǎn)品。據(jù)我了解,不止是BAT,現(xiàn)在很多外企也在使用redis來做緩存。
為什么要用redis做緩存,當(dāng)然是因為它強(qiáng)大的快速讀取能力。
接下來我們簡單分析,redis為什么能夠這么快的讀取,自然也就明白,為什么redis的設(shè)計者要把數(shù)據(jù)放在內(nèi)存中。
BAT的一個對redis有很深了解的高級工程師曾經(jīng)說過,redis就是如果所有數(shù)據(jù)都在內(nèi)存里,那么單線程是效率最高的。為什么這么說呢,多線程的本質(zhì)是CPU模擬出多個線程去操作,但是模擬是有代價的,學(xué)過操作系統(tǒng)的朋友應(yīng)該知道,多線程之間切換是要切換上下文的,這也是對時間的一種消耗。所以,對于單處理器來說,當(dāng)然是單線程,無切換才是最高效率的。redis就是用一塊CPU綁定了一塊內(nèi)存,然后對數(shù)據(jù)的操作都是在這塊內(nèi)存上進(jìn)行的,基于此,單線程的redis已經(jīng)達(dá)到了效率最大化。
Redis能夠?qū)崿F(xiàn)快讀取的另一個原因就是實現(xiàn)了IO多路復(fù)用。舉個例子來輔助理解,在餐館吃飯,通常是入座后自己看菜單,等到有需要的時候,喊服務(wù)員來幫你下單。就算飯店是滿員的,不考慮上菜這個環(huán)節(jié)對服務(wù)員的消耗,這個時候,1個服務(wù)員也是足夠為多個餐桌服務(wù)的。這個場景,就算多個餐桌對一個服務(wù)員的復(fù)用,與為每個餐桌配一個服務(wù)員比起來,明顯節(jié)約了人力資源,也減少了由于服務(wù)員過多時,與后臺通信時排隊的等待時間。
進(jìn)一步說,如果下完單,菜就在后廚制作,然后由服務(wù)員直接去點菜臺拿,當(dāng)然要比服務(wù)員還要跑到隔壁(數(shù)據(jù)存儲在MySQL或者ES)去拿要快得多。
所以,數(shù)據(jù)當(dāng)然還是放在緩存(廚房),而不是持久層(別人家廚房)里快。
以上是我的淺見,歡迎各位在下方評論與我交流。
內(nèi)存的讀取數(shù)據(jù)快,適用于應(yīng)用系統(tǒng)的緩存,把常用的屬性值存放在Redis,提高應(yīng)用系統(tǒng)的I/O性能。
同時為了Redis也提供了持久化功能,即可以定時把內(nèi)存中的數(shù)據(jù)持久化存儲在硬盤,在斷電后可以快速把之前的緩存恢復(fù)。
現(xiàn)在內(nèi)存的價格也越來越便宜,內(nèi)存的大小也越來越大,這也是內(nèi)存數(shù)據(jù)庫發(fā)展比較快的一個原因。
為了快。redis是單線程架構(gòu),采用的I/O多路復(fù)用的事件模型,單線程架構(gòu)避免了頻繁的上下文切換,但帶來的問題就是如果有一個操作慢就會導(dǎo)致堵塞。內(nèi)存和硬盤的讀寫速度不是一個量級的,這樣可以提供redis更快的讀寫速度,保證redis的高性能。
到此,以上就是小編對于redis寫入失敗怎么辦的問題就介紹到這了,希望這1點解答對大家有用。
當(dāng)前文章:redis為什么把數(shù)據(jù)放到內(nèi)存中?(redis寫入后沒有數(shù)據(jù)怎么解決)
本文URL:http://m.fisionsoft.com.cn/article/dpjcdop.html


咨詢
建站咨詢
