溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

redis為什么用單線程

發(fā)布時(shí)間:2021-11-01 10:50:15 來源:億速云 閱讀:193 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫(kù)

本篇內(nèi)容主要講解“redis為什么用單線程”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“redis為什么用單線程”吧!

1.基本概念

  • 什么是redis的單線程(核心功能在單線程上,并不是所有功能)

    • 持久化

    • 異步刪除

    • 集群數(shù)據(jù)同步

    • redis的網(wǎng)絡(luò)IO和鍵值對(duì)讀寫是由一個(gè)線程完成的(redis的核心服務(wù))

    • redis的其他功能由額外線程完成

【相關(guān)推薦:Redis視頻教程】

2.redis為什么用單線程

  • 多線程的開銷

    • 被多線程同時(shí)訪問共享資源,比如共享的數(shù)據(jù)結(jié)構(gòu)

    • 為了保證線程安全,導(dǎo)致性能的犧牲

    • 粗粒度的鎖導(dǎo)致所有串行,系統(tǒng)的吞吐率隨著線程的增加而增加

    • 使用多線程可以增加系統(tǒng)吞吐率(每個(gè)請(qǐng)求),增加系統(tǒng)擴(kuò)展性

    • 無限的增加線程數(shù),導(dǎo)致吞吐量下降

  • 因此為了節(jié)省并發(fā)資源的管理,redis使用單線程,保證所有操作串行化

redis為什么用單線程

redis為什么用單線程

3.單線程的redis為什么快

  • redis大部分操作都在內(nèi)存上+高效的數(shù)據(jù)結(jié)構(gòu)

  • redis采用多路復(fù)用機(jī)制,在網(wǎng)絡(luò)中處理大量客戶端請(qǐng)求,實(shí)現(xiàn)高吞吐率

4.socket

  • socket通信過程(網(wǎng)絡(luò)IO處理+鍵值對(duì)讀寫+網(wǎng)絡(luò)IO處理)

    • SimpleKV 為了處理一個(gè) Get 請(qǐng)求

    • 需要監(jiān)聽客戶端請(qǐng)求(bind/listen)

    • 和客戶端(代碼)建立連接(accept)

    • 從 socket 中讀取請(qǐng)求(recv)

    • 解析客戶端發(fā)送請(qǐng)求(parse)

    • 根據(jù)請(qǐng)求類型讀取鍵值數(shù)據(jù)(get)

    • 最后給客戶端返回結(jié)果,即向 socket 中寫回?cái)?shù)據(jù)(send)

  • 潛在的阻塞點(diǎn)

    • accept() 未能成功建立連接時(shí),會(huì)一直阻塞\

    • recv() 從客戶端讀取數(shù)據(jù)時(shí),會(huì)一直阻塞\

redis為什么用單線程

  • socket的非阻塞模式

  • 保證 Redis 線程,既不會(huì)像基本 IO 模型中一直在阻塞點(diǎn)等待,也不會(huì)導(dǎo)致 Redis 無法處理實(shí)際到達(dá)的連接請(qǐng)求或數(shù)據(jù)

  • Linux 中的 IO 多路復(fù)用機(jī)制

redis為什么用單線程

5.多路復(fù)用

  • Linux中的IO多路復(fù)用機(jī)制指一個(gè)線程處理多個(gè)IO流,select/poll

  • 在單線程下,同時(shí)存在監(jiān)聽多個(gè)套接字和已連接套接字

  • 具體實(shí)現(xiàn)

    • 首先將事件放入事件隊(duì)列,無需潤(rùn)徐請(qǐng)求是否實(shí)際發(fā)生,避免CPU資源浪費(fèi)

    • 根據(jù)相應(yīng)的事件執(zhí)行響應(yīng)的操作

    • FD是多個(gè)套接字

    • Redis使用epoll機(jī)制,讓內(nèi)核監(jiān)聽套接字

    • Redis可以和多個(gè)客戶端連接并處理請(qǐng)求,從而提升并發(fā)性

    • select/epoll提供了基于事件的回調(diào)機(jī)制,針對(duì)不同的事件調(diào)用對(duì)應(yīng)的處理函數(shù)

redis為什么用單線程

到此,相信大家對(duì)“redis為什么用單線程”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI