Redis為什麼這麼快

2022-03-05 12:36:13 字數 1805 閱讀 2864

redis採用的是基於記憶體的採用的是單程序單執行緒模型的kv 資料庫由c語言編寫,官方提供的資料是可以達到100000+的qps(每秒內查詢次數)

簡單測試(2g單核)

ping_inline: 82236.84 requests per second

ping_bulk: 89525.52 requests per second

set: 82987.55 requests per second

get: 67659.00 requests per second

incr: 71022.73 requests per second

lpush: 73206.44 requests per second

rpush: 69252.08 requests per second

lpop: 66800.27 requests per second

rpop: 70671.38 requests per second

sadd: 68965.52 requests per second

spop: 90497.73 requests per second

lpush (needed to benchmark lrange): 85984.52 requests per second

lrange_100 (first 100 elements): 35050.82 requests per second

lrange_300 (first 300 elements): 13255.57 requests per second

lrange_500 (first 450 elements): 8701.71 requests per second

lrange_600 (first 600 elements): 6487.61 requests per second

mset (10 keys): 64226.07 requests per second

完全基於記憶體,絕大部分請求是純粹的記憶體操作,非常快速。資料存在記憶體中,類似於hashmap,hashmap的優勢就是查詢和操作的時間複雜度都是o(1);

採用單執行緒,避免了不必要的上下文切換和競爭條件,也不存在多程序或者多執行緒導致的切換而消耗 cpu,不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因為可能出現死鎖而導致的效能消耗

使用多路i/o復用模型,非阻塞io;

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

資料結構簡單,對資料操作也簡單,redis中的資料結構是專門進行設計的

但是,我們使用單執行緒的方式是無法發揮多核cpu 效能,不過我們可以通過在單機開多個redis 例項來完善

因為redis是基於記憶體的操作,cpu不是redis的瓶頸,redis的瓶頸最有可能是機器記憶體的大小或者網路頻寬。既然單執行緒容易實現,而且cpu不會成為瓶頸,那就順理成章地採用單執行緒的方案了 ,多執行緒會增加複雜度,使用鎖機制來保證資料一致性

這裡我們一直在強調的單執行緒,只是在處理我們的網路請求的時候只有乙個執行緒來處理,乙個正式的redis server執行的時候肯定是不止乙個執行緒的,這裡需要大家明確的注意一下!例如redis進行持久化的時候會以子程序或者子執行緒的方式執行

Redis為什麼這麼快?

今天我在乙個技術群裡提出乙個問題 redis為什麼這麼快,redis的那些特性能夠支援了它的高併發?之前的我,也只是知道redis是記憶體資料庫,所以讀取速度快 io使用的是多路復用,使用乙個執行緒來輪詢描述符,減少了執行緒上下文的切換,將資料庫的開 關 讀 寫都轉化成了時間,所以io時也有加速。雖...

Redis為什麼這麼快?

1 完全基於記憶體,絕大部分請求是純粹的記憶體操作,非常快速。資料存在記憶體中,類似於hashmap,hashmap的優勢就是查詢和操作的時間複雜度都是o 1 2 資料結構簡單,對資料操作也簡單,redis中的資料結構是專門進行設計的 3 採用單執行緒,避免了不必要的上下文切換和競爭條件,也不存在多...

Redis為什麼這麼快?

目錄 一 redis為什麼這麼快?二 redis為什麼是單執行緒的?redis採用的是基於記憶體的採用的是單程序單執行緒模型的 kv 資料庫,由c語言編寫,官方提供的資料是可以達到100000 的qps 每秒內查詢次數 以下幾點造就了redis非常快的特點 採用單執行緒避免了不必要的上下文切換和競爭...