Redis (一) 爲什麼要使用Redis及Redis快速的原因

主流應用架構

在這裏插入圖片描述

  1. 請求數據在緩存層直接返回
  2. 緩存層沒有數據則向存儲層(數據庫)穿透查詢
  3. 數據庫將查詢好的數據回寫給緩存層、方便下次客戶端請求數據時直接從緩存層返回 (回種)
  4. 將回種的數據返回給客戶端
  5. 熔斷機制:當存儲層掛掉或者無法提供服務時、可讓客戶端的請求直接打在緩存層上然後直接返回

緩存中間件——Memcache和Redis的區別

  1. Memcache

    • 支持簡單數據類型
    • 不支持數據持久化存儲 服務器宕機之後數據會丟失
    • 不支持主從同步
    • 不支持分片
  2. Redis

    • 數據類型豐富 不僅支持簡單的數據類型、還支持list、set、hash等數據的存儲
    • 支持數據磁盤持久化存儲
    • 支持主從同步
    • 支持分片
    • 支持數據的備份

(轉)Memcache和redis的區別


Redis快速的原因

100000+QPS(query per second,每秒內查詢次數)

  1. 完全基於內存、絕大部分請求是純粹的內存操作,執行效率高。
  2. 數據結構簡單、對數據操作也簡單,redis中的數據結構是專門進行設計的。數據存在內存中,類似於HashMap,HashMap的優勢就是查找和操作的時間複雜度都是O(1);
  3. 採用單線程,避免了不必要的上下文切換和競爭條件,也不存在多進程或者多線程導致的切換而消耗 CPU,不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因爲可能出現死鎖而導致的性能消耗;
  4. 使用多路I/O操作模型,非阻塞IO

傳統阻塞模型

  • 當使用read或write對一個文件描述符進行操作時、如果當前文件描述符不可讀或者不可寫、整個服務就不會對整個操作進行響應

多路I/O複用模型
在這裏插入圖片描述

多路I/O複用模型是利用 select、poll、epoll 可以同時監察多個流的 I/O 事件的能力,在空閒的時候,會把當前線程阻塞掉,當有一個或多個流有 I/O 事件時,就從阻塞態中喚醒,於是程序就會輪詢一遍所有的流(epoll 是隻輪詢那些真正發出了事件的流),並且只依次順序的處理就緒的流,這種做法就避免了大量的無用操作。

這裏“多路”指的是多個網絡連接,“複用”指的是複用同一個線程。採用多路 I/O 複用技術可以讓單個線程高效的處理多個連接請求(儘量減少網絡 IO 的時間消耗),且 Redis 在內存中操作數據的速度非常快,也就是說內存內的操作不會成爲影響Redis性能的瓶頸,主要由以上幾點造就了 Redis 具有很高的吞吐量。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章