-
1 # 此生唯一
-
2 # 滿滿滿
為了快。redis是單執行緒架構,採用的I/O多路複用的事件模型,單執行緒架構避免了頻繁的上下文切換,但帶來的問題就是如果有一個操作慢就會導致堵塞。記憶體和硬碟的讀寫速度不是一個量級的,這樣可以提供redis更快的讀寫速度,保證redis的高效能。
-
3 # 分歧亮點
記憶體的讀取資料快,適用於應用系統的快取,把常用的屬性值存放在Redis,提高應用系統的I/O效能。
同時為了Redis也提供了持久化功能,即可以定時把記憶體中的資料持久化儲存在硬碟,在斷電後可以快速把之前的快取恢復。
現在記憶體的價格也越來越便宜,記憶體的大小也越來越大,這也是記憶體資料庫發展比較快的一個原因。
-
4 # 一個存在感小透明
當然是為了讀取快呀。Redis誕生之後,就被作為memcached接班人而寄予厚望,而不是做資料持久層的產品。據我瞭解,不止是BAT,現在很多外企也在使用redis來做快取。
為什麼要用redis做快取,當然是因為它強大的快速讀取能力。
接下來我們簡單分析,redis為什麼能夠這麼快的讀取,自然也就明白,為什麼redis的設計者要把資料放在記憶體中。
單執行緒的Redis
BAT的一個對redis有很深瞭解的高階工程師曾經說過,redis就是如果所有資料都在記憶體裡,那麼單執行緒是效率最高的。為什麼這麼說呢,多執行緒的本質是CPU模擬出多個執行緒去操作,但是模擬是有代價的,學過作業系統的朋友應該知道,多執行緒之間切換是要切換上下文的,這也是對時間的一種消耗。所以,對於單處理器來說,當然是單執行緒,無切換才是最高效率的。redis就是用一塊CPU綁定了一塊記憶體,然後對資料的操作都是在這塊記憶體上進行的,基於此,單執行緒的redis已經達到了效率最大化。
IO多路複用Redis能夠實現快讀取的另一個原因就是實現了IO多路複用。舉個例子來輔助理解,在餐館吃飯,通常是入座後自己看選單,等到有需要的時候,喊服務員來幫你下單。就算飯店是滿員的,不考慮上菜這個環節對服務員的消耗,這個時候,1個服務員也是足夠為多個餐桌服務的。這個場景,就算多個餐桌對一個服務員的複用,與為每個餐桌配一個服務員比起來,明顯節約了人力資源,也減少了由於服務員過多時,與後臺通訊時排隊的等待時間。
進一步說,如果下完單,菜就在後廚製作,然後由服務員直接去點菜臺拿,當然要比服務員還要跑到隔壁(資料儲存在MySQL或者ES)去拿要快得多。
所以,資料當然還是放在快取(廚房),而不是持久層(別人家廚房)裡快。
回覆列表
這個問題問得有問題!!
首先,redis確實是一個記憶體型的資料庫系統,把大量資料在記憶體中使用,並快速存取,但是,redis提供了以資料庫檔案的方式持久化資料的選擇,透過使用bgsave,save等命令,可以把快取中的資料儲存到磁碟中進行永久性儲存!
把題目換種問法!為什麼記憶體讀取比磁碟讀取資料速度快?
1,記憶體是電器元件,利用高低電平儲存資料,而磁碟是機械元件(去買電腦的時候寫著5400r/min或者7200r/min),電氣原件速度超級快,而磁碟因為在每個磁碟塊切換的時候,磁頭會消耗比較多的時間,也就是IO時間長,所以效能沒發比!
2,磁碟的資料進行操作的時候也都是讀取到記憶體中,由CPU進行操作的,所以直接放在記憶體中的資料,讀取速度肯定快了很多很多!
那麼記憶體有哪些缺點呢?
1,丟資料:記憶體因為是儲存的高低電平,斷電之後資料全部丟失,而磁碟儲存了二進位制檔案,斷電以後資料依然存在!
2,記憶體貴:一塊4G的記憶體和一個500g的磁碟價格差不多,因為記憶體設計工藝要求更高,材料也更加昂貴!
所以,不僅僅是redis,幾乎所有的快取系統都會先用到記憶體作為資料快速讀取的基本保證,然後才能有擴充套件資料持久化的可能!
redis作為分散式的可持久化的單執行緒的key-value快取系統,有著大量的優點,吸引著廣大開發者的關注,同時在保證資料一致性等問題上通常作為首選條件!
關於redis叢集,指令,開啟持久化,防止記憶體穿透等問題,之後會有提及,敬請關注。。。