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

【緩存中間件】Redis哈希槽的概念

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

數(shù)據(jù)分布理論


分布式數(shù)據(jù)庫(kù)首先要解決把整個(gè)數(shù)據(jù)集按照分區(qū)規(guī)則映射到多個(gè)節(jié)點(diǎn)的問(wèn)題,即把數(shù)據(jù)集劃分到多個(gè)節(jié)點(diǎn)上,每個(gè)節(jié)點(diǎn)負(fù)責(zé)整體數(shù)據(jù)的一個(gè)子集。。
需要重點(diǎn)關(guān)注的是數(shù)據(jù)分區(qū)規(guī)則。常見(jiàn)的分區(qū)規(guī)則有哈希分區(qū)和順序分區(qū)兩種,哈希分區(qū)離散度好、數(shù)據(jù)分布業(yè)務(wù)無(wú)關(guān)、無(wú)法順序訪問(wèn),順序分區(qū)離散度易傾斜、數(shù)據(jù)分布業(yè)務(wù)相關(guān)、可順序訪問(wèn)。

節(jié)點(diǎn)取余分區(qū)


使用特定的數(shù)據(jù),如Redis的鍵或用戶ID,再根據(jù)節(jié)點(diǎn)數(shù)量N使用公式hash(key)%N計(jì)算出哈希值,用來(lái)決定數(shù)據(jù)映射到哪一個(gè)節(jié)點(diǎn)上。這種方案存在一個(gè)問(wèn)題:當(dāng)節(jié)點(diǎn)數(shù)量變化時(shí),如擴(kuò)容或收縮節(jié)點(diǎn),數(shù)據(jù)節(jié)點(diǎn)映射關(guān)系需要重新計(jì)算,會(huì)導(dǎo)致數(shù)據(jù)的重新遷移。
這種方式的突出優(yōu)點(diǎn)是簡(jiǎn)單性,常用于數(shù)據(jù)庫(kù)的分庫(kù)分表規(guī)則,一般采用預(yù)分區(qū)的方式,提前根據(jù)數(shù)據(jù)量規(guī)劃好分區(qū)數(shù),比如劃分為512或1024張表,保證可支撐未來(lái)一段時(shí)間的數(shù)據(jù)量再根據(jù)負(fù)載情況將表遷移到其他數(shù)據(jù)庫(kù)中。擴(kuò)容時(shí)通常采用翻倍擴(kuò)容,避免數(shù)據(jù)映射全部被打亂導(dǎo)致全量遷移的情況。

一致性哈希分區(qū)


實(shí)現(xiàn)思路是為系統(tǒng)中每個(gè)節(jié)點(diǎn)分配一個(gè)token,范圍一般在0~23,這些token構(gòu)成一個(gè)哈希環(huán)。數(shù)據(jù)讀寫(xiě)執(zhí)行節(jié)點(diǎn)查找操作時(shí),先根據(jù)key計(jì)算hash值,然后順時(shí)針找到第一個(gè)大于等于該哈希值的token節(jié)點(diǎn)。例如:
集群中有三個(gè)節(jié)點(diǎn)(Node1、Node2、Node3),五個(gè)鍵(key1key2 key3key4、key5),其路由規(guī)為:

【緩存中間件】Redis哈希槽的概念,Java面試題,軟件研發(fā),緩存,中間件,redis

?當(dāng)集群中增加節(jié)點(diǎn)時(shí),比如當(dāng)在Node2和Node3之間增加了一個(gè)節(jié)點(diǎn)Node4,此時(shí)再訪問(wèn)節(jié)點(diǎn)key4時(shí),不能在Node4中命中,更一般的,介于Node2和Node4之間的key均失效,這樣的失效方式太過(guò)于“集中”和“暴力”,更好的方式應(yīng)該是“平滑”和“分散”地失效。

【緩存中間件】Redis哈希槽的概念,Java面試題,軟件研發(fā),緩存,中間件,redis

?這種方式相比節(jié)點(diǎn)取余最大的好處在于加入和副除節(jié)點(diǎn)只影響哈希環(huán)中相鄰的節(jié)點(diǎn),對(duì)其他節(jié)點(diǎn)無(wú)影響。但一致性哈希分區(qū)存在幾個(gè)問(wèn)題
1、當(dāng)使用少量節(jié)點(diǎn)時(shí),節(jié)點(diǎn)變化將大范圍影響哈希環(huán)中數(shù)據(jù)映射,因此這種方式不適合少量數(shù)據(jù)節(jié)點(diǎn)的分布式方案。
2、增加節(jié)點(diǎn)只能對(duì)下一個(gè)相鄰節(jié)點(diǎn)有比較好的負(fù)載分擔(dān)效果,例如上圖中增加了節(jié)點(diǎn)Node4只能夠?qū)ode3分擔(dān)部分負(fù)載,對(duì)集群中其他的節(jié)點(diǎn)基本沒(méi)有起到負(fù)載分擔(dān)的效果;類似地,刪除節(jié)點(diǎn)會(huì)導(dǎo)致下一個(gè)相鄰節(jié)點(diǎn)負(fù)載增加,而其他節(jié)點(diǎn)卻不能有效分擔(dān)負(fù)載壓力。
正因?yàn)橐恢滦怨7謪^(qū)的這些缺點(diǎn),一些分布式系統(tǒng)采用虛擬槽對(duì)一致性哈希進(jìn)行改進(jìn),比如虛擬一致性哈希分區(qū)。

虛擬一致性哈希分區(qū)

【緩存中間件】Redis哈希槽的概念,Java面試題,軟件研發(fā),緩存,中間件,redis

為了在增刪節(jié)點(diǎn)的時(shí)候,各節(jié)點(diǎn)能夠保持動(dòng)態(tài)的均衡,將每個(gè)真實(shí)節(jié)點(diǎn)虛擬出若干個(gè)虛擬節(jié)點(diǎn),再將這些虛擬節(jié)點(diǎn)隨機(jī)映射到環(huán)上。此時(shí)每個(gè)真實(shí)節(jié)點(diǎn)不再映射到環(huán)上,真實(shí)節(jié)點(diǎn)只是用來(lái)存儲(chǔ)鍵值對(duì),它負(fù)責(zé)接應(yīng)各自的一組環(huán)上虛擬節(jié)點(diǎn)。當(dāng)對(duì)鍵值對(duì)進(jìn)行存取路由時(shí),首先路由到虛擬節(jié)點(diǎn)上,再由虛擬節(jié)點(diǎn)找到真實(shí)的節(jié)點(diǎn)。
如下圖所示,三個(gè)節(jié)點(diǎn)真實(shí)節(jié)點(diǎn): Node1、Node2和Node3,每個(gè)真實(shí)節(jié)點(diǎn)虛擬出三個(gè)虛擬節(jié)點(diǎn): X#V1X#V2和X#V3,這樣每個(gè)真實(shí)節(jié)點(diǎn)所負(fù)責(zé)的hash空間不再是連續(xù)的一段,而是分散在環(huán)上的各處,這樣就可以將局部的壓力均衡到不同的節(jié)點(diǎn),虛擬節(jié)點(diǎn)越多,分散性越好,理論上負(fù)載就越傾向均勻。

虛擬槽分區(qū)


Redis則是利用了虛擬槽分區(qū),可以算上面虛擬一致性哈希分區(qū)的變種,它使用分散度良好的哈希函數(shù)把所有數(shù)據(jù)映射到一個(gè)固定范圍的整數(shù)集合中,整數(shù)定義為槽( slot)。這個(gè)范圍一般遠(yuǎn)遠(yuǎn)大于節(jié)點(diǎn)數(shù),比如RedisCluster言范圍是0~16383。槽是集群內(nèi)數(shù)據(jù)管理和遷移的基本單位。采用大范圍槽的主要目的是為了方便數(shù)據(jù)拆分和集群擴(kuò)展。每個(gè)節(jié)點(diǎn)會(huì)負(fù)責(zé)一定數(shù)量的槽
比如集群有3個(gè)節(jié)點(diǎn),則每個(gè)節(jié)點(diǎn)平均大約負(fù)責(zé)5460個(gè)槽。由于采用高質(zhì)量的哈希算法,每個(gè)槽所映射的數(shù)據(jù)通常比較均勻,將數(shù)據(jù)平均劃分到5個(gè)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)分區(qū)。Redis Cluster就是采用虛擬槽分區(qū)下面就介紹Redis數(shù)據(jù)分區(qū)方法。

為什么Redis只取16384個(gè)槽

Redis集群中,在握手成功后,連個(gè)節(jié)點(diǎn)之間會(huì)定期發(fā)送ping/pong消息,交換數(shù)據(jù)信息,集群中節(jié)點(diǎn)數(shù)量越多,消息體內(nèi)容越大,比如說(shuō)10個(gè)節(jié)點(diǎn)的狀態(tài)信息約1kb,同時(shí)redis集群內(nèi)節(jié)點(diǎn),每秒都在發(fā)ping消息,例如個(gè)總節(jié)點(diǎn)數(shù)為200的Redis集群,默認(rèn)情況下,這時(shí)ping/pong消息占用帶寬達(dá)到25M。
那么如果槽位為65536,發(fā)送心跳信息的消息頭達(dá)8k,發(fā)送的心跳包過(guò)于龐大,非常浪費(fèi)帶寬。
其次redis的集群主節(jié)點(diǎn)數(shù)量基本不可能超過(guò)1000個(gè)。集群節(jié)點(diǎn)越多,心跳包的消息體內(nèi)攜帶的數(shù)據(jù)越多。如果節(jié)點(diǎn)過(guò)1000個(gè),也會(huì)導(dǎo)致網(wǎng)絡(luò)擁堵。因此redis作者,不建議redis cluster節(jié)點(diǎn)數(shù)量超過(guò)1000個(gè)。
那么,對(duì)于節(jié)點(diǎn)數(shù)在1000以內(nèi)的redis cluster集群,16384個(gè)槽位夠用了,可以以確保每個(gè) master 有足夠的插槽,沒(méi)有必要拓展到65536個(gè)。
再者Redis主節(jié)點(diǎn)的配置信息中,它所負(fù)責(zé)的哈希槽是通過(guò)一張bitmap的形式來(lái)保存的,在傳輸過(guò)程中,會(huì)對(duì)bitmap進(jìn)行壓縮,但是如果bitmap的填充率slots/N很高的話(N表示節(jié)點(diǎn)數(shù)),也就是節(jié)點(diǎn)數(shù)很少,而哈希槽數(shù)量很多的話,bitmap的壓縮率就很低,也會(huì)浪費(fèi)資源。
所以Redis作者決定取16384個(gè)槽,作為一個(gè)比較好的設(shè)計(jì)權(quán)衡。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-544674.html

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

本文來(lái)自互聯(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)文章

  • 中間件系列 - Redis入門到實(shí)戰(zhàn)(高級(jí)篇-分布式緩存)

    中間件系列 - Redis入門到實(shí)戰(zhàn)(高級(jí)篇-分布式緩存)

    學(xué)習(xí)視頻: 黑馬程序員Redis入門到實(shí)戰(zhàn)教程,深度透析redis底層原理+redis分布式鎖+企業(yè)解決方案+黑馬點(diǎn)評(píng)實(shí)戰(zhàn)項(xiàng)目 中間件系列 - Redis入門到實(shí)戰(zhàn) 本內(nèi)容僅用于個(gè)人學(xué)習(xí)筆記,如有侵?jǐn)_,聯(lián)系刪除 學(xué)習(xí)目標(biāo) Redis持久化 Redis主從 Redis哨兵 Redis分片集群 - 基于Redis集群解決單機(jī)R

    2024年02月03日
    瀏覽(23)
  • Java 緩存中間件

    Java 緩存中間件

    :Spring Cache、J2Cache、JetCache JSR107 中制訂了 Java 緩存的規(guī)范。 因此,在很多緩存框架、緩存庫(kù)中,其 API 都參考了 JSR 107 規(guī)范。 img Java Caching 定義了 5 個(gè)核心接口 CachingProvider - 定義了創(chuàng)建、配置、獲取、管理和控制多個(gè) CacheManager 。一個(gè)應(yīng)用可以在運(yùn)行期訪問(wèn)多個(gè) Cac

    2024年02月04日
    瀏覽(20)
  • 【云原生進(jìn)階之PaaS中間件】第一章Redis-2.4緩存更新機(jī)制

    【云原生進(jìn)階之PaaS中間件】第一章Redis-2.4緩存更新機(jī)制

    ????????無(wú)論先操作db還是cache,都會(huì)有各自的問(wèn)題,根本原因是cache和db的更新不是一個(gè)原子操作,因此總會(huì)有不一致的問(wèn)題。想要徹底解決這種問(wèn)題必須將cache和db的更新操作歸在一個(gè)事務(wù)之下(例如使用一些分布式事務(wù),或者強(qiáng)一致性的分布式協(xié)議)?;蛘卟捎么谢?,

    2024年02月10日
    瀏覽(78)
  • 【Java程序員面試專欄 分布式中間件】Redis 核心面試指引

    【Java程序員面試專欄 分布式中間件】Redis 核心面試指引

    關(guān)于Redis部分的核心知識(shí)進(jìn)行一網(wǎng)打盡,包括Redis的基本概念,基本架構(gòu),工作流程,存儲(chǔ)機(jī)制等,通過(guò)一篇文章串聯(lián)面試重點(diǎn),并且?guī)椭訌?qiáng)日?;A(chǔ)知識(shí)的理解,全局思維導(dǎo)圖如下所示 明確redis的特性、應(yīng)用場(chǎng)景和數(shù)據(jù)結(jié)構(gòu) Redis是一個(gè) 開(kāi)源的、內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng)

    2024年02月20日
    瀏覽(17)
  • 【云原生進(jìn)階之PaaS中間件】第一章Redis-1.6.1Java項(xiàng)目使用Redis

    【云原生進(jìn)階之PaaS中間件】第一章Redis-1.6.1Java項(xiàng)目使用Redis

    ????????redis的java客戶端很多,官方推薦的有三種: Jedis Lettuce Redisson Spring 對(duì)Redis 客戶端進(jìn)行了整合,提供了Spring Date Redis ,在Spring Boot項(xiàng)目中還提供了對(duì)應(yīng)的Starter,即spring-boot-starter-data-redis。 ????????使用Jedis操作Redis的步驟: 1.獲取鏈接; 2.執(zhí)行操作; 3.關(guān)閉連接

    2024年02月09日
    瀏覽(22)
  • 中間件-緩存、索引、日志

    中間件-緩存、索引、日志

    緩存是性能優(yōu)化的一大利器 我們先一起來(lái)看一個(gè)用戶中心查詢用戶信息的基本流程 這時(shí)候,如果查找用戶信息這個(gè) API 的調(diào)用頻率增加,并且在整個(gè)業(yè)務(wù)流程中,同一個(gè)用戶的信息會(huì)多次被調(diào)用,那么我們可以引入緩存機(jī)制來(lái)提升性能: 也就是說(shuō),在 UserService 中引入一個(gè)

    2024年01月23日
    瀏覽(22)
  • 微服務(wù)中間件--多級(jí)緩存

    微服務(wù)中間件--多級(jí)緩存

    傳統(tǒng)緩存的問(wèn)題 傳統(tǒng)的緩存策略一般是請(qǐng)求到達(dá)Tomcat后,先查詢Redis,如果未命中則查詢數(shù)據(jù)庫(kù),存在下面的問(wèn)題: 請(qǐng)求要經(jīng)過(guò)Tomcat處理,Tomcat的性能成為整個(gè)系統(tǒng)的瓶頸 Redis緩存失效時(shí),會(huì)對(duì)數(shù)據(jù)庫(kù)產(chǎn)生沖擊 多級(jí)緩存方案 多級(jí)緩存就是充分利用請(qǐng)求處理的每個(gè)環(huán)節(jié),分別

    2024年02月11日
    瀏覽(36)
  • 開(kāi)發(fā)實(shí)踐6_緩存^中間件

    開(kāi)發(fā)實(shí)踐6_緩存^中間件

    以下學(xué)習(xí) 朔寧夫 開(kāi)發(fā)工程師 課程。 緩存可提高程序響應(yīng)速度。數(shù)據(jù)庫(kù)緩存(可過(guò)期)/ Redis緩存(Key:Value)/ Memcacheed緩存/ 程序?qū)泳彺妗?一 緩存 1. 數(shù)據(jù)庫(kù)緩存 創(chuàng)建緩存數(shù)據(jù)表 // python manage.py createcachetable cache_table setting // 創(chuàng)建新的演示 app // ?python manage.py startapp cache_app setting注冊(cè)

    2024年01月19日
    瀏覽(25)
  • 中間件的概念

    中間件的概念

    中間件(middleware)是基礎(chǔ)軟件的一大類,屬于可復(fù)用的軟件范疇。中間件在操作系統(tǒng)軟件,網(wǎng)絡(luò)和數(shù)據(jù)庫(kù)之上,應(yīng)用軟件之下,總的作用是為處于自己上層的應(yīng)用軟件提供運(yùn)行于開(kāi)發(fā)的環(huán)境,幫助用戶靈活、高效的開(kāi)發(fā)和集成復(fù)雜的應(yīng)用軟件。 ? IDC對(duì)中間件的定義為:中間件是

    2024年02月03日
    瀏覽(25)
  • 分布式消息中間件概念

    分布式消息中間件概念

    ? ? 對(duì)于分布式消息中間件,首先要了解兩個(gè)基礎(chǔ)的概念,即什么是分布式系統(tǒng),什么又是中間件。 ? ? ? 分布式系統(tǒng) ? “A distributed system is one in which components located at networked computers communicate and coordinate their actions only by passing messasges.”——《Distributed Systems Concepts and Desig

    2023年04月27日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包