国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Redis Plus 來了,性能炸裂!

這篇具有很好參考價(jià)值的文章主要介紹了Redis Plus 來了,性能炸裂!。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

來源:https://developer.aliyun.com/article/705239

1 什么是KeyDB?

KeyDB是Redis的高性能分支,專注于多線程,內(nèi)存效率和高吞吐量。除了多線程之外,KeyDB還具有僅在Redis Enterprise中可用的功能,例如Active Replication,F(xiàn)LASH存儲(chǔ)支持以及一些根本不可用的功能,例如直接備份到AWS S3。

KeyDB與Redis協(xié)議,模塊和腳本保持完全兼容性。這包括腳本和事務(wù)的原子性保證。由于KeyDB與Redis開發(fā)保持同步,因此KeyDB是Redis功能的超集,從而使KeyDB取代了現(xiàn)有Redis部署。

在相同的硬件上,KeyDB每秒可以執(zhí)行的查詢數(shù)量是Redis的兩倍,而延遲卻降低了60%。Active-Replication簡(jiǎn)化了熱備用故障轉(zhuǎn)移,使您可以輕松地在副本上分配寫操作并使用基于TCP的簡(jiǎn)單負(fù)載平衡/故障轉(zhuǎn)移。KeyDB的高性能可讓您在更少的硬件上做更多的事情,從而降低了運(yùn)營(yíng)成本和復(fù)雜性。

Redis Plus 來了,性能炸裂!

在此處查看完整的基準(zhǔn)測(cè)試結(jié)果和設(shè)置信息:

https://docs.keydb.dev/blog/2019/10/07/blog-post/

2 走進(jìn)KeyDB

KeyDB項(xiàng)目是從redis fork出來的分支。眾所周知redis是一個(gè)單線程的kv內(nèi)存存儲(chǔ)系統(tǒng),而KeyDB在100%兼容redis API的情況下將redis改造成多線程。

項(xiàng)目git地址:

https://github.com/JohnSully/KeyDB

網(wǎng)上公開的技術(shù)細(xì)節(jié)比較少,本文基本是通過閱讀源碼總結(jié)出來的,如有錯(cuò)漏之處歡迎指正。

推薦一個(gè)開源免費(fèi)的 Spring Boot 最全教程:

https://github.com/javastacks/spring-boot-best-practice

多線程架構(gòu)

線程模型

KeyDB將redis原來的主線程拆分成了主線程和worker線程。每個(gè)worker線程都是io線程,負(fù)責(zé)監(jiān)聽端口,accept請(qǐng)求,讀取數(shù)據(jù)和解析協(xié)議。如圖所示:

Redis Plus 來了,性能炸裂!

KeyDB使用了SO_REUSEPORT特性,多個(gè)線程可以綁定監(jiān)聽同個(gè)端口。

每個(gè)worker線程做了cpu綁核,讀取數(shù)據(jù)也使用了SO_INCOMING_CPU特性,指定cpu接收數(shù)據(jù)。

解析協(xié)議之后每個(gè)線程都會(huì)去操作內(nèi)存中的數(shù)據(jù),由一把全局鎖來控制多線程訪問內(nèi)存數(shù)據(jù)。

主線程其實(shí)也是一個(gè)worker線程,包括了worker線程的工作內(nèi)容,同時(shí)也包括只有主線程才可以完成的工作內(nèi)容。在worker線程數(shù)組中下標(biāo)為0的就是主線程。

主線程的主要工作在實(shí)現(xiàn)serverCron,包括:

  • 處理統(tǒng)計(jì)
  • 客戶端鏈接管理
  • db數(shù)據(jù)的resize和reshard
  • 處理aof
  • replication主備同步
  • cluster模式下的任務(wù)

鏈接管理

在redis中所有鏈接管理都是在一個(gè)線程中完成的。在KeyDB的設(shè)計(jì)中,每個(gè)worker線程負(fù)責(zé)一組鏈接,所有的鏈接插入到本線程的鏈接列表中維護(hù)。鏈接的產(chǎn)生、工作、銷毀必須在同個(gè)線程中。每個(gè)鏈接新增一個(gè)字段

int iel; /* the event loop index we're registered with */

用來表示鏈接屬于哪個(gè)線程接管。

KeyDB維護(hù)了三個(gè)關(guān)鍵的數(shù)據(jù)結(jié)構(gòu)做鏈接管理:

  • clients_pending_write:線程專屬的鏈表,維護(hù)同步給客戶鏈接發(fā)送數(shù)據(jù)的隊(duì)列
  • clients_pending_asyncwrite:線程專屬的鏈表,維護(hù)異步給客戶鏈接發(fā)送數(shù)據(jù)的隊(duì)列
  • clients_to_close:全局鏈表,維護(hù)需要異步關(guān)閉的客戶鏈接

分成同步和異步兩個(gè)隊(duì)列,是因?yàn)閞edis有些聯(lián)動(dòng)api,比如pub/sub,pub之后需要給sub的客戶端發(fā)送消息,pub執(zhí)行的線程和sub的客戶端所在線程不是同一個(gè)線程,為了處理這種情況,KeyDB將需要給非本線程的客戶端發(fā)送數(shù)據(jù)維護(hù)在異步隊(duì)列中。

同步發(fā)送的邏輯比較簡(jiǎn)單,都是在本線程中完成,以下圖來說明如何同步給客戶端發(fā)送數(shù)據(jù)

Redis Plus 來了,性能炸裂!

如上文所提到的,一個(gè)鏈接的創(chuàng)建、接收數(shù)據(jù)、發(fā)送數(shù)據(jù)、釋放鏈接都必須在同個(gè)線程執(zhí)行。異步發(fā)送涉及到兩個(gè)線程之間的交互。KeyDB通過管道在兩個(gè)線程中傳遞消息:

int fdCmdWrite; //寫管道
int fdCmdRead; //讀管道

本地線程需要異步發(fā)送數(shù)據(jù)時(shí),先檢查client是否屬于本地線程,非本地線程獲取到client專屬的線程ID,之后給專屬的線程管到發(fā)送AE_ASYNC_OP::CreateFileEvent的操作,要求添加寫socket事件。專屬線程在處理管道消息時(shí)將對(duì)應(yīng)的請(qǐng)求添加到寫事件中,如圖所示:

Redis Plus 來了,性能炸裂!

redis有些關(guān)閉客戶端的請(qǐng)求并非完全是在鏈接所在的線程執(zhí)行關(guān)閉,所以在這里維護(hù)了一個(gè)全局的異步關(guān)閉鏈表。

Redis Plus 來了,性能炸裂!

鎖機(jī)制

KeyDB實(shí)現(xiàn)了一套類似spinlock的鎖機(jī)制,稱之為fastlock。

fastlock的主要數(shù)據(jù)結(jié)構(gòu)有:

struct ticket
{
    uint16_t m_active;  //解鎖+1
    uint16_t m_avail;  //加鎖+1
};
struct fastlock
{
    volatile struct ticket m_ticket;

    volatile int m_pidOwner; //當(dāng)前解鎖的線程id
    volatile int m_depth; //當(dāng)前線程重復(fù)加鎖的次數(shù)
};

使用原子操作__atomic_load_2,__atomic_fetch_add,__atomic_compare_exchange來通過比較m_active=m_avail判斷是否可以獲取鎖。fastlock提供了兩種獲取鎖的方式:

  • try_lock:一次獲取失敗,直接返回
  • lock:忙等,每1024 * 1024次忙等后使用sched_yield 主動(dòng)交出cpu,挪到cpu的任務(wù)末尾等待執(zhí)行。

在KeyDB中將try_lock和事件結(jié)合起來,來避免忙等的情況發(fā)生。每個(gè)客戶端有一個(gè)專屬的lock,在讀取客戶端數(shù)據(jù)之前會(huì)先嘗試加鎖,如果失敗,則退出,因?yàn)閿?shù)據(jù)還未讀取,所以在下個(gè)epoll_wait處理事件循環(huán)中可以再次處理。

Redis Plus 來了,性能炸裂!

Active-Replica

KeyDB實(shí)現(xiàn)了多活的機(jī)制,每個(gè)replica可設(shè)置成可寫非只讀,replica之間互相同步數(shù)據(jù)。主要特性有:

  • 每個(gè)replica有個(gè)uuid標(biāo)志,用來去除環(huán)形復(fù)制
  • 新增加rreplay API,將增量命令打包成rreplay命令,帶上本地的uuid
  • key,value加上時(shí)間戳版本號(hào),作為沖突校驗(yàn),如果本地有相同的key且時(shí)間戳版本號(hào)大于同步過來的數(shù)據(jù),新寫入失敗。采用當(dāng)前時(shí)間戳向左移20位,再加上后44位自增的方式來獲取key的時(shí)間戳版本號(hào)。

參考文檔:https://docs.keydb.dev/docs/commands

近期熱文推薦:

1.1,000+ 道 Java面試題及答案整理(2022最新版)

2.勁爆!Java 協(xié)程要來了。。。

3.Spring Boot 2.x 教程,太全了!

4.別再寫滿屏的爆爆爆炸類了,試試裝飾器模式,這才是優(yōu)雅的方式?。?/p>

5.《Java開發(fā)手冊(cè)(嵩山版)》最新發(fā)布,速速下載!

覺得不錯(cuò),別忘了隨手點(diǎn)贊+轉(zhuǎn)發(fā)哦!文章來源地址http://www.zghlxwxcb.cn/news/detail-423804.html

到了這里,關(guān)于Redis Plus 來了,性能炸裂!的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • notepad++官網(wǎng)地址 https://notepad-plus-plus.org/;notepad++ 官網(wǎng)地址 https://notepad-plus-plus.org/

    notepad++ 官網(wǎng)地址 https://notepad-plus-plus.org/ 今天想進(jìn)官網(wǎng)下載notepad++ ,卻發(fā)現(xiàn)百度搜索官網(wǎng)都是出來很多亂七八糟的,就自己記錄一下 notepad++官網(wǎng):https://notepad-plus-plus.org/ notepad++項(xiàng)目主頁(yè):https://github.com/notepad-plus-plus/notepad-plus-plus/

    2024年02月11日
    瀏覽(20)
  • 騰訊云輕量應(yīng)用服務(wù)器性能如何?測(cè)評(píng)來了

    騰訊云輕量應(yīng)用服務(wù)器性能如何?測(cè)評(píng)來了

    騰訊云輕量應(yīng)用服務(wù)器性能如何?CPU型號(hào)主頻、內(nèi)存、公網(wǎng)帶寬和系統(tǒng)盤存儲(chǔ)多維對(duì)比,輕量應(yīng)用服務(wù)器會(huì)不會(huì)比云服務(wù)器CVM性能差?相對(duì)于CVM云服務(wù)器輕量服務(wù)器更適合輕量級(jí)的應(yīng)用,輕量服務(wù)適合中小企或個(gè)人開發(fā)者用于搭建We網(wǎng)站b應(yīng)用、小程序、APP以及開發(fā)測(cè)試環(huán)境等

    2024年02月11日
    瀏覽(27)
  • redis-plus-plus訪問REDIS集群

    編程語言:C++ 開源庫(kù):redis-plus-plus 接口類:RedisCluster 初始化需要輸入任意一個(gè)結(jié)點(diǎn)的IP和端口,如果設(shè)置了密碼,還需要密碼的明文并使用ConnectionOptions類。 初始化完成后可以直接進(jìn)行讀/寫操作。 RedisCluster::set RedisCluster::get RedisCluster::exists 未完待續(xù)。。。。。。 以下內(nèi)容

    2024年02月05日
    瀏覽(8)
  • 網(wǎng)頁(yè)版的 Redis 可視化工具來了,已開源

    網(wǎng)頁(yè)版的 Redis 可視化工具來了,已開源

    輕量級(jí)Redis緩存圖形化管理工具,包含redis的5種數(shù)據(jù)類型的CRUD操作 后端 springboot 2.2.2.RELEASE JDK 1.8 jedis 3.2.0 commons-lang3 3.5 hutool-core 5.1.1 fastjson 1.2.62 h2database 1.4.200 前端 vue-admin 1.0.5 axios 0.15.3 element-ui 2.13.0 font-awesome 4.7.0 nprogress 0.2.0 vue 2.2.2 vue-router 2.3.0 vuex 2.0.0-rc.6 安裝JDK1.8以上

    2024年02月04日
    瀏覽(25)
  • Spring Boot + Redis 延時(shí)雙刪功能,實(shí)戰(zhàn)來了!

    Spring Boot + Redis 延時(shí)雙刪功能,實(shí)戰(zhàn)來了!

    在多線程并發(fā)情況下,假設(shè)有兩個(gè)數(shù)據(jù)庫(kù)修改請(qǐng)求,為保證數(shù)據(jù)庫(kù)與redis的數(shù)據(jù)一致性,修改請(qǐng)求的實(shí)現(xiàn)中需要修改數(shù)據(jù)庫(kù)后,級(jí)聯(lián)修改Redis中的數(shù)據(jù)。 請(qǐng)求一:A修改數(shù)據(jù)庫(kù)數(shù)據(jù) B修改Redis數(shù)據(jù) 請(qǐng)求二:C修改數(shù)據(jù)庫(kù)數(shù)據(jù) D修改Redis數(shù)據(jù) 并發(fā)情況下就會(huì)存在A — C — D — B的情況

    2024年02月08日
    瀏覽(16)
  • 阿里二面:千萬級(jí)、億級(jí)數(shù)據(jù),如何性能優(yōu)化? 教科書級(jí) 答案來了

    阿里二面:千萬級(jí)、億級(jí)數(shù)據(jù),如何性能優(yōu)化? 教科書級(jí) 答案來了

    在尼恩指導(dǎo)了幾百個(gè)小伙伴的面試,在這些過程中, 非常、非常高頻的一個(gè)面試題: 千萬級(jí)數(shù)據(jù),如何做性能優(yōu)化? 億級(jí)數(shù)據(jù),如何做性能優(yōu)化? 最近,有個(gè)小伙伴阿里二面,又遇到了這個(gè)問題。 其實(shí),尼恩一直想梳理一個(gè)教科書式的答案, 但是由于千萬級(jí)數(shù)據(jù)、億級(jí)數(shù)

    2024年02月02日
    瀏覽(22)
  • 騰訊云4核8G服務(wù)器CVM S5和輕量應(yīng)用服務(wù)器性能PK來了

    騰訊云4核8G服務(wù)器CVM S5和輕量應(yīng)用服務(wù)器性能PK來了

    騰訊云4核8G云服務(wù)器可以選擇輕量應(yīng)用服務(wù)器或CVM云服務(wù)器標(biāo)準(zhǔn)型S5實(shí)例,輕量4核8G12M服務(wù)器446元一年,CVM S5云服務(wù)器935元一年,相對(duì)于云服務(wù)器CVM,輕量應(yīng)用服務(wù)器性價(jià)比更高,輕量服務(wù)器CPU和CVM有區(qū)別嗎?性能差異如何?騰訊云百科來詳細(xì)說下騰訊云4核8G服務(wù)器選輕量還

    2023年04月25日
    瀏覽(24)
  • HTTPS加密協(xié)議詳解:HTTPS性能與優(yōu)化

    前文討論了HTTPS原理與優(yōu)勢(shì):身份驗(yàn)證、信息加密與完整性校驗(yàn)等,且未對(duì)TCP和HTTP協(xié)議做任何修改。但通過增加新協(xié)議以實(shí)現(xiàn)更安全的通信必然需要付出代價(jià),HTTPS協(xié)議的性能損耗主要體現(xiàn)如下: (1).增加延時(shí) 分析前面的握手過程,一次完整的握手至少需要兩端依次來回兩次

    2024年02月09日
    瀏覽(18)
  • Cloudfront HTTPS 性能優(yōu)化

    HTTP/2 相比廉頗老矣的 HTTP/1.x,HTTP/2 在底層傳輸做了很大的改動(dòng)和優(yōu)化包括有: 每個(gè)服務(wù)器只用一個(gè)連接,節(jié)省多次建立連接的時(shí)間,在TLS上效果尤為明顯 加速 TLS 交付,HTTP/2 只耗時(shí)一次 TLS 握手,通過一個(gè)連接上的多路利用實(shí)現(xiàn)最佳性能 更安全,通過減少 TLS 的性能損失,

    2024年02月11日
    瀏覽(15)
  • 升級(jí)還是不升級(jí)?iPhone 15和iPhone 14 Plus性能比較

    升級(jí)還是不升級(jí)?iPhone 15和iPhone 14 Plus性能比較

    預(yù)覽iPhone 15 Pro Max與三星Galaxy S23 Ultra之戰(zhàn)是有正當(dāng)理由的。顯然,三星的旗艦智能手機(jī)為2023年的所有其他旗艦產(chǎn)品定下了基調(diào)——由于其超長(zhǎng)的電池壽命和一流的攝像頭,證明了它是最受歡迎的產(chǎn)品。 毫不奇怪,Galaxy S23 Ultra不僅是最好的照相手機(jī)之一,也是花錢能買到的最

    2024年02月11日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包