redis為什么把數據放到內存中?
當然是為了讀取快呀。Redis誕生之后,就被作為memcached接班人而寄予厚望,而不是做數據持久層的產品。據我了解,不止是BAT,現在很多外企也在使用redis來做緩存。
為什么要用redis做緩存,當然是因為它強大的快速讀取能力。
接下來我們簡單分析,redis為什么能夠這么快的讀取,自然也就明白,為什么redis的設計者要把數據放在內存中。
單線程的RedisBAT的一個對redis有很深了解的高級工程師曾經說過,redis就是如果所有數據都在內存里,那么單線程是效率最高的。為什么這么說呢,多線程的本質是CPU模擬出多個線程去操作,但是模擬是有代價的,學過操作系統的朋友應該知道,多線程之間切換是要切換上下文的,這也是對時間的一種消耗。所以,對于單處理器來說,當然是單線程,無切換才是最高效率的。redis就是用一塊CPU綁定了一塊內存,然后對數據的操作都是在這塊內存上進行的,基于此,單線程的redis已經達到了效率最大化。
IO多路復用Redis能夠實現快讀取的另一個原因就是實現了IO多路復用。舉個例子來輔助理解,在餐館吃飯,通常是入座后自己看菜單,等到有需要的時候,喊服務員來幫你下單。就算飯店是滿員的,不考慮上菜這個環節對服務員的消耗,這個時候,1個服務員也是足夠為多個餐桌服務的。這個場景,就算多個餐桌對一個服務員的復用,與為每個餐桌配一個服務員比起來,明顯節約了人力資源,也減少了由于服務員過多時,與后臺通信時排隊的等待時間。
進一步說,如果下完單,菜就在后廚制作,然后由服務員直接去點菜臺拿,當然要比服務員還要跑到隔壁(數據存儲在MySQL或者ES)去拿要快得多。
所以,數據當然還是放在緩存(廚房),而不是持久層(別人家廚房)里快。
以上是我的淺見,歡迎各位在下方評論與我交流。
我是蘇蘇思量,來自BAT的Java開發工程師,每日分享科技類見聞,歡迎關注我,與我共同進步。