面試官問你redis是單線程還是多線程該怎么回答?


近乎所有與Java相關的面試都會問到緩存的問題,基礎一點的會問到redis數據格式、什么是“熱數據和冷數據”,復雜一點的會問到緩存雪崩、緩存穿透、緩存預熱、緩存更新、緩存降級等問題,這些看似不常見的概念,都與我們的緩存服務器相關,一般常用的緩存服務器有Redis、Memcached等,就redis單線程,這篇文章做一個簡單介紹

Redis采用的是基於內存的采用的是單進程單線程模型的 KV 數據庫,由C語言編寫,官方提供的數據是可以達到100000+的QPS(每秒內查詢次數)。這個數據不比采用單進程多線程的同樣基於內存的 KV 數據庫 Memcached 差!

為什么說redis是單線程的,看下面這張圖

 

 

Redis基於Reactor模式開發了網絡事件處理器,這個處理器被稱為文件事件處理器。它的組成結構為4部分:多個套接字、IO多路復用程序、文件事件分派器、事件處理器。因為文件事件分派器隊列的消費是單線程的,所以Redis才叫單線程模型。
redis之所以這么快,是因為:
    1、他是完全基於內存,絕大部分的請求都是內存操作
    2、數據結構比較簡單,對數據的操作也簡單
    3、使用多路I/O復用模型,多路I/O復用模型是利用 select、poll、epoll 可以同時監察多個流的 I/O 事件的能力,在空閑的時候,會把當前線程阻塞掉,當有一個或多個流有 I/O 事件時,就從阻塞態中喚醒,於是程序就會輪詢一遍所有的流(epoll 是只輪詢那些真正發出了事件的流),並且只依次順序的處理就緒的流,這種做法就避免了大量的無用操作
 
但是我們也知道,一般來說 Redis 的瓶頸並不在 CPU,而在內存和網絡。如果要使用 CPU 多核,可以搭建多個 Redis 實例來解決。這點據聽說redis6將實現多線程,對redis速度將是一個質的提高,讓我們期待吧!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM