日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
單線程Redis如此之快的四個(gè)原因

?前言

作為內(nèi)存中數(shù)據(jù)存儲(chǔ),Redis 以其速度和性能著稱,通常被用作大多數(shù)后端服務(wù)的緩存解決方案。

創(chuàng)新互聯(lián)建站專注于東海網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供東海營銷型網(wǎng)站建設(shè),東海網(wǎng)站制作、東海網(wǎng)頁設(shè)計(jì)、東海網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造東海網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供東海網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

但是,在內(nèi)部,Redis 采用單線程架構(gòu)。

為什么單線程設(shè)計(jì)依然會(huì)有這么高的性能?如果利用多線程并發(fā)處理請求不是更好嗎?

在本文中,讓我們深入探討為什么 Redis 才有單線程架構(gòu),依然如此之快,主要從下面4個(gè)方面講解。

  • 內(nèi)存數(shù)據(jù)存儲(chǔ)
  • 優(yōu)良的數(shù)據(jù)結(jié)構(gòu)
  • 單線程架構(gòu)
  • 非阻塞IO

讓我們一一剖析。

內(nèi)存數(shù)據(jù)存儲(chǔ)

訪問 RAM 比磁盤快幾個(gè)數(shù)量級(jí)

Redis 是一個(gè)基于內(nèi)存存儲(chǔ)數(shù)據(jù),也就是上面表的RAM。

Redis 中的每個(gè)讀寫操作都等同于從命中 RAM(隨機(jī)存取存儲(chǔ)器)的變量中讀取和寫入。

訪問 RAM 比直接訪問磁盤快幾個(gè)數(shù)量級(jí),因此,Redis 比其他數(shù)據(jù)存儲(chǔ)快得多。

優(yōu)良的數(shù)據(jù)結(jié)構(gòu)

作為內(nèi)存中的數(shù)據(jù)存儲(chǔ),Redis 利用各種底層數(shù)據(jù)結(jié)構(gòu)來高效地存儲(chǔ)數(shù)據(jù),而無需擔(dān)心如何將它們持久化到持久存儲(chǔ)中。

例如,Redis 列表是使用鏈表實(shí)現(xiàn)的,該鏈表允許在列表的頭部和尾部附近進(jìn)行恒定時(shí)間 O(1) 的插入和刪除。

另一方面,Redis 排序集是通過跳躍列表實(shí)現(xiàn)的,它可以實(shí)現(xiàn)更快的查詢和插入。

簡而言之,無需擔(dān)心持久化數(shù)據(jù),Redis 中的數(shù)據(jù)可以更有效地存儲(chǔ),以便通過不同的數(shù)據(jù)結(jié)構(gòu)進(jìn)行快速檢索。

單線程架構(gòu)

單線程進(jìn)程

Redis 的寫入和讀取速度極快,CPU 使用率對(duì) Redis 來說從來都不是問題。

根據(jù) Redis 官方文檔,在普通 Linux 系統(tǒng)上運(yùn)行時(shí),Redis 每秒可以傳遞多達(dá) 100 萬個(gè)請求。

然而,瓶頸主要來自網(wǎng)絡(luò) I/O。Redis 中的處理時(shí)間主要浪費(fèi)在等待網(wǎng)絡(luò) I/O 上。

雖然多線程架構(gòu)允許應(yīng)用程序通過上下文切換并發(fā)處理任務(wù),但 Redis 的性能提升是微乎其微的,因?yàn)榇蠖鄶?shù)線程最終會(huì)在 I/O 中被阻塞。

通過采用單線程架構(gòu),Redis有下面的幾個(gè)好處:

  • 最小化由于線程創(chuàng)建或銷毀引起的 CPU 消耗
  • 最大限度地減少由于上下文切換引起的 CPU 消耗
  • 減少鎖開銷,因?yàn)槎嗑€程應(yīng)用程序需要鎖來進(jìn)行線程同步,這很容易出錯(cuò)
  • 能夠使用各種“線程不安全”命令,例如 lpush

非阻塞 I/O

為了處理傳入的請求,服務(wù)器需要在套接字上調(diào)用系統(tǒng)調(diào)用以將數(shù)據(jù)從網(wǎng)絡(luò)緩沖區(qū)讀取到用戶空間。

這通常是一個(gè)阻塞操作,線程被阻塞并且在完全接收到來自客戶端的數(shù)據(jù)之前什么都不做。

為什么我們不在確定套接字中的數(shù)據(jù)已準(zhǔn)備好讀取時(shí)才調(diào)用系統(tǒng)調(diào)用?

這就是 I/O 多路復(fù)用發(fā)揮作用的地方。

I/O 多路復(fù)用模塊同時(shí)監(jiān)視多個(gè)套接字,并且只返回可讀的套接字。

準(zhǔn)備好讀取的套接字被推送到單線程事件循環(huán),并由相應(yīng)的處理程序使用??Reactor Pattern??進(jìn)行處理。

簡而言之,

  • 由于其阻塞性質(zhì),網(wǎng)絡(luò) I/O 很慢
  • Redis內(nèi)存操作速度快,Redis收到命令后可以快速執(zhí)行

因此,Redis 有意識(shí)地做出以下決定:

  • 使用 I/O 多路復(fù)用來緩解緩慢的網(wǎng)絡(luò) I/O 問題
  • 使用單線程架構(gòu)減少鎖開銷

總結(jié)

綜上所述,單線程架構(gòu)是Redis團(tuán)隊(duì)經(jīng)過時(shí)間考驗(yàn)的深思熟慮的選擇。盡管是單線程的,Redis 仍然是性能最高和最常用的內(nèi)存數(shù)據(jù)存儲(chǔ)之一。


文章題目:單線程Redis如此之快的四個(gè)原因
瀏覽地址:http://www.dlmjj.cn/article/dhddscc.html