我們們一起來談談,redis為什麼快?
在程式媛的生涯中,設定快取會想起它,控制併發會想到它,做一些壓縮儲存依舊會想到它,一直停留在知道的起點上,但是沒有深入的去挖掘和總結它這麼受歡迎的原因。近期天時地利人和,整理了一下它的點點滴滴。
☁ 和Memcached一較高低
記得前幾年,專案中比較常用的還是Memcached,儲存影象、視訊,搭建叢集也是樣樣都行。但是隨著redis的發展,redis慢慢的融入到專案中,開始佔有一席之地。但是與成熟的Memcached並肩前行,redis雖然是新興的,但是Memcached依舊有redis不可替代的適用場景:
第一個場景:儲存一些粒度比較小的靜態資料,比如一些html片段,Memcached便是我們更好的選擇。相對於redis而言,Memcached的後設資料metadata更小些,所以相對來講對於資料儲存管理的效能更高,額外開銷更小。
Memcached唯一支援的資料型別是String,所以更適合儲存只讀資料,因為字串並不會因為額外的處理造成額外的開銷。畢竟Memcached每次更新一個物件時,都需要重複執行下面的操作:獲取整個字串->反序列化為物件->修改其中的值->再次序列化該物件->在快取中將整個字串替換為新字串。這樣一來,更新儲存資料就會有更高的消耗,可能就不是我們的最佳選擇了。
第二個場景:比redis更容易水平擴充套件。具體的擴充套件方式請參見:點選開啟連結
☁ Redis的優勢
✎ 快取管理:可以在必要時將無效的舊資料從記憶體中刪除,為新資料騰出新的空間(過期的key的三種清理策略)。
✎ 提供更大的靈活性:redis支援多種型別,並且採用key-value 的形式儲存,key和value的大小限制都是512Mb,與編碼無關,所以資料安全。但是memcached限制key最大為250位元組,value為1MB,況且只支援String型別。Redis通過Hash來儲存一個物件的欄位和值,並且可以通過單個key來管理它們(設定值,設定過期時間),而且我們可以很方便的通過Linux命令或者redis-cli完成對key的管理。
✎ redis提供主從複製:實現高可用的cache系統,支援叢集中多個伺服器之間的資料同步。
✎ 資料持久化:redis可以通過兩種方式將資料進行持久化,一定程度上規避快取中的資料不穩定的問題,也可以在重啟伺服器時最快的恢復快取中所需的資料,提高了效率的同事減輕了主資料庫系統的開銷。
☁ Redis為什麼會快?
✎ 完全基於記憶體
Redis是純記憶體資料庫,相對於讀寫磁碟,讀寫記憶體的速度就不是幾倍幾十倍了,一般,hash查詢可以達到每秒百萬次的數量級。
✎ 多路複用IO
“多路”指的是多個網路連線,“複用”指的是複用同一個執行緒。採用多路 I/O 複用技術可以讓單個執行緒高效的處理多個連線請求(儘量減少網路IO的時間消耗)。可以直接理解為:單執行緒的原子操作,避免上下文切換的時間和效能消耗;加上對記憶體中資料的處理速度,很自然的提高redis的吞吐量。
對於Redis的內部實現和原始碼設計還在進一步研究,有新的理解和心得會及時在這裡跟大家一起分享哦!
相關文章
- 當我們在談論HTTP快取時我們在談論什麼HTTP快取
- 當我們談優化時,我們談些什麼優化
- 當我們談論格鬥遊戲時,我們在談論什麼遊戲
- 我們為什麼要用RedisRedis
- 為什麼我們仍在談論軟體整合?
- 當我們談論Promise時,我們說些什麼Promise
- 當我們談 Java 併發的時候,你們在談什麼?Java
- 談Web應用開發時我們談什麼Web
- 當我們談深度學習時,我們用它落地了什麼?深度學習
- 當我們談論CloudTable時究竟在談論什麼?Cloud
- 當我們談微服務,我們在談什麼 (3) — 如何保障微服務的穩定性微服務
- 當我們在談論建構函式注入的時候我們在談論什麼函式
- 為什麼我們做分散式使用Redis?分散式Redis
- 我們究竟在怕什麼?——談談恐怖遊戲的元素堆砌遊戲
- 當我們談論Spring的時候到底在談什麼Spring
- 網際網路創業,我們一起談談商業模式!創業模式
- 讓我們談談自動駕駛的未來和「道德」自動駕駛
- 當我們談論Virtual DOM時,我們在說什麼——etch原始碼解讀原始碼
- 為什麼我們需要 VuexVue
- 我們為什麼而工作
- [視訊]Jez Humble:我們為什麼要“持續交付”(圖靈訪談)圖靈
- 實踐之後,我們來談談如何做好威脅建模
- 我們為什麼選擇VUE來構建前端Vue前端
- 是時候談談JavaScript物件導向了!(我們什麼時候更需要它)JavaScript物件
- 我們有線上社群啦!快來加入一起玩兒~
- 這篇文章,我們來談一談Spring中的屬性注入Spring
- (004)我們一起學Python;閒談資料型別Python資料型別
- 我們一起聊聊什麼是NAT協議協議
- 為什麼要用Redis?Redis為什麼這麼快?(來自知乎)Redis
- React Hooks 可以為我們帶來什麼,及為什麼我覺得React才是前端的未來ReactHook前端
- 我們為什麼需要async/await ?AI
- 我們為什麼需要 lock 檔案
- [譯] 為什麼我們需要 Web 3.0Web
- 我們為什麼仍然信任遠端工作
- 我們工作到底為了什麼
- HMS Core Insights第三期直播回顧 – 當我們在談論App的時候,我們還可以談論什麼?APP
- HMS Core Insights第三期直播預告—— 當我們在談論App的時候,我們還可以談論什麼?APP
- GC是什麼?為什麼我們要去使用它GC