成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:為什么單線程的 Redis 可以實現高并發訪問

存儲 存儲軟件 Redis
從Redis自身特性來說,Redis是基于內存的數據庫,所以數據處理速度非常快。另外它的底層使用了很多效率很高的數據結構,如哈希表和跳表等。另外Redis從狹義上面來說他是單線程的,網絡請求解析與數據讀寫都是由主線程完成。

 [[442488]]

背景

上回說到小楓在接受面試官的拷打,所幸第一個問題回答的還不錯,因此面試官對于小楓的初步印象還行。我們接著來看看小楓是怎么和面試官繼續過招的吧,他還能扛得住面試官幾個連環炮呢?

面試官考察目的分析

面試官:Redis了解嗎?說說為什么單線程的Redis可以支持高并發訪問?

面試官考察目的分析:

1、考察候選同學對于Redis原理的理解程度;

2、考察候選同學對于網絡連接的理解程度;

面試題分析

面試官的問題中包含了兩個關鍵詞,一個是單線程一個是高并發訪問,因此我們在回答問題的時候主要從兩個方面出發,先解釋清楚為什么Redis選擇單線程的實現方式,再解釋清楚為什么Redis能支持高并發訪問。

小楓:(內心OS:根據面試官的問題,決定從兩方面來進行闡述,先整理下回答思路)

從Redis自身特性來說,Redis是基于內存的數據庫,所以數據處理速度非常快。另外它的底層使用了很多效率很高的數據結構,如哈希表和跳表等。另外Redis從狹義上面來說他是單線程的,網絡請求解析與數據讀寫都是由主線程完成。因此它內部就省去了很多多線程訪問共享數據資源的繁瑣設計,同時也避免了頻繁的線程上下文切換因此減少了多線程的系統開銷。

從IO模型角度來說,Redis使用的是IO多路復用模型,使得它可以在網絡IO操作并發處理數十萬的客戶端網絡連接,實現非常高的網絡吞吐率。這也是Redis可以實現高并發訪問的最主要的原因。

PS:關于IO模型可以參考以前的文章

一文說清BIO、NIO、AIO不同IO模型演進之路

面試官:剛才你提到了IO多路復用模型,能詳細說下Redis的IO多路復用的原理嗎?

小楓:(內心OS:當時為了搞清楚這個問題,還特意扒了Redis源碼來看,對于一個Java程序猿來說,看c真的頭暈啊)

好的。首先要明確的是Redis依賴Linux操作系統實現的高性能IO,剛剛提到的多路復用IO模型實際也是傳統阻塞型IO模型演化而來的。在傳統的網絡IO操作中,accept() 和 recv()函數都是阻塞型的,一旦發生阻塞,影響其他網絡連接。但是在多路復用IO模型中,可以實現同時存在多個socket,內核監聽socket中的是否有數據請求或者連接請求,如果有請求,那么內核就會交給Redis進行處理,因此Redis的主線程,也就是單線程的Redis可以處理多個IO連接。

整個過程涉及到epoll_create、epoll_ctl以及epoll_wait三個系統調用,具體的過程大致是這樣的:

1、當Redis啟動的時候,會調用內核的epoll_create創建epoll對象,在這個過程中包含初始化紅黑樹cache以及雙向鏈表,紅黑樹中主要存儲了需要進行狀態監控的FD,實際就是epitem結構體,雙向鏈表中存儲了需要返回給用戶已經處于就緒狀態的事件。

2、調用epoll_ctl(),通過epoll_ctl注冊要監聽的事件類型,將客戶端FD以及需要監聽的事件添加到紅黑樹cache中,添加時進行檢查,如果已存在則返回,如果不存在則添加到節點當中,同時注冊相應的事件回調函數,如果存在連接事件或者讀寫事件,那么就會通過回調函數將就緒的事件加入到雙向鏈表中,實際就是紅黑樹的節點。

3、Redis調用epoll_wait獲取已經就緒的事件的fired數組,fire數組的事件中存儲了就緒的FD以及事件類型,遍歷數組中的事件,根據事件類型處理函數繼續后續的處理。如果是讀事件那就調用讀事件處理函數進行處理。對于Redis來說它只要關注鏈表中有沒有數據就好,有數據就會進行讀取,沒有數據則阻塞超過timeout之后再進行調用。在大多數情況下,返回的數組中包含的事件并不多。通過這樣的設計,Redis不需要一直輪訓檢查到底有沒有實際的請求發生,避免了CPU資源的浪費。因此及時是單線程的Redis,借助于epoll機制,它也可以實現數十萬連接的并發處理。

面試官:(內心OS:小伙子回答的不錯,看來常見的面試題難不倒你啊,那么我就來問問陷阱題吧,嘿嘿)

總結

程序猿小楓這次表現不錯,抗住了面試官關于Redis的連環炮,那么接下來的問題他還能回答出來嗎?請大家繼續拭目以待哦。

本文轉載自微信公眾號「慕楓技術筆記」,可以通過以下二維碼關注。轉載本文請聯系慕楓技術筆記公眾號。

 

責任編輯:武曉燕 來源: 慕楓技術筆記
相關推薦

2020-10-30 16:20:38

Redis單線程高并發

2019-05-07 09:44:45

Redis高并發模型

2019-05-06 11:12:18

Redis高并發單線程

2022-07-18 13:59:43

Redis單線程進程

2021-08-10 07:00:01

Redis單線程并發

2023-03-21 08:02:36

Redis6.0IO多線程

2023-10-15 12:23:10

單線程Redis

2019-04-02 11:20:48

Redis高并發單線程

2019-06-17 14:20:51

Redis數據庫Java

2020-06-11 09:35:39

Redis單線程Java

2022-07-06 13:48:24

RedisSentinel機制

2023-08-17 14:12:17

2019-11-25 10:13:52

Redis單線程I

2023-12-20 14:35:37

Java虛擬線程

2021-08-05 12:41:57

高并發性能CAS

2019-02-18 08:10:53

2021-03-03 08:01:58

Redis多線程程序

2020-11-17 10:20:53

Redis多線程單線程

2025-06-17 00:22:00

2025-01-17 08:23:33

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区四区av | 先锋资源站 | 国产精品3区 | 仙人掌旅馆在线观看 | 韩国毛片一区二区三区 | 欧美精品久久久 | 色婷婷综合久久久久中文一区二区 | 日韩国产一区二区三区 | 国产成人99久久亚洲综合精品 | 欧美精品一区二区三区在线四季 | 天天看天天操 | 黑人精品xxx一区一二区 | 日韩在线免费电影 | 国产999精品久久久久久 | www.天天操.com| 国产一区二区精品在线 | 欧美成人高清视频 | 国产乱码精品一区二区三区中文 | 免费高潮视频95在线观看网站 | 久久精品视频在线观看 | 2022精品国偷自产免费观看 | 日本精品视频一区二区三区四区 | 久久99精品久久久 | 日本aaaa| 久久久久九九九女人毛片 | 亚洲欧美自拍偷拍视频 | 久久9999久久 | 国产精品久久久久久久久免费软件 | 亚洲一区精品视频 | 欧美三级视频 | 午夜黄色影院 | 成人网址在线观看 | 农夫在线精品视频免费观看 | 国产精品污www一区二区三区 | 一区二区三区影院 | 新超碰97| 国产精品夜色一区二区三区 | 久久国产精品视频免费看 | 久久手机在线视频 | 嫩草懂你的影院入口 | 日本一区二区电影 |