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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Redis的虛擬槽實(shí)現(xiàn)可擴(kuò)展的高可用分片(redis+虛擬槽)

Redis的虛擬槽實(shí)現(xiàn)可擴(kuò)展的高可用分片

Redis是一個(gè)開源的高性能鍵值對(duì)存儲(chǔ)數(shù)據(jù)庫(kù),在數(shù)據(jù)量上升、訪問(wèn)量增大的情況下,需要對(duì)Redis進(jìn)行分片,以提高Redis的性能和可用性。Redis的分片方案有多種,其中使用虛擬槽實(shí)現(xiàn)可擴(kuò)展的高可用分片是一種常用的方案。

虛擬槽是Redis分片的基本單位,Redis節(jié)點(diǎn)都分配了一定數(shù)量的虛擬槽,每個(gè)虛擬槽可以管理一個(gè)基于Redis的數(shù)據(jù)集。Redis將數(shù)據(jù)映射到虛擬槽上,不同的虛擬槽可以分配給不同的Redis節(jié)點(diǎn),這樣就實(shí)現(xiàn)了數(shù)據(jù)的分片存儲(chǔ)。同時(shí),在多個(gè)Redis節(jié)點(diǎn)時(shí),如果某個(gè)節(jié)點(diǎn)失效,僅需遷移該節(jié)點(diǎn)上的虛擬槽即可,可以避免引發(fā)整個(gè)集群的故障。

虛擬槽的分配方法:

虛擬槽是一個(gè)由0到16384之間的整數(shù)來(lái)表示的抽象概念,每個(gè)槽表示一份數(shù)據(jù),且每個(gè)槽只能被一個(gè)Redis節(jié)點(diǎn)管理。節(jié)點(diǎn)可以使用多少槽和需要管理哪些槽可以通過(guò)集群槽映射來(lái)進(jìn)行定義和控制,這個(gè)映射關(guān)系是由Redis的任一節(jié)點(diǎn)維護(hù)的。

當(dāng)Redis集群?jiǎn)?dòng)時(shí),任一節(jié)點(diǎn)上的集群槽映射會(huì)初始化為所有的槽都是未分配的狀態(tài),每個(gè)節(jié)點(diǎn)會(huì)被分配一段連續(xù)的槽。Redis節(jié)點(diǎn)控制的虛擬槽數(shù)量以及哪些槽被控制是由槽映射來(lái)定義的。集群槽映射由主節(jié)點(diǎn)負(fù)責(zé)維護(hù),并通過(guò)Gossip協(xié)議來(lái)通知給其他節(jié)點(diǎn),以保證整個(gè)集群上的每一個(gè)節(jié)點(diǎn)都有一份相同的集群槽映射。

虛擬槽的負(fù)載均衡:

一般來(lái)說(shuō),Redis的虛擬槽分布在不同的節(jié)點(diǎn)上,節(jié)點(diǎn)之間應(yīng)該能夠均衡承擔(dān)虛擬槽的請(qǐng)求。實(shí)際上,虛擬槽的數(shù)量對(duì)均衡負(fù)載的影響很大。如果分配的槽數(shù)量太少,就會(huì)導(dǎo)致某些節(jié)點(diǎn)上的槽空閑,而其他節(jié)點(diǎn)則會(huì)過(guò)載。如果分配的槽數(shù)量太多,每個(gè)節(jié)點(diǎn)都要維護(hù)太多的槽,導(dǎo)致性能下降。因此,如果槽映射非常重要,一種典型的解決方案是使用一種負(fù)載均衡算法,例如,哈希環(huán)來(lái)分配。

哈希環(huán)是一種分布式算法,可以在分布式環(huán)境中均衡地分布任意數(shù)量的節(jié)點(diǎn)。每個(gè)節(jié)點(diǎn)被映射到哈希環(huán)上的一個(gè)位置上,使用一種哈希算法從客戶端發(fā)送的請(qǐng)求中得到一個(gè)哈希值。該哈希值被映射到離該哈希值最近的節(jié)點(diǎn)位置上(即,離該哈希值最近的那個(gè)節(jié)點(diǎn)將負(fù)責(zé)處理該請(qǐng)求)。

實(shí)現(xiàn)虛擬槽:

redis虛擬槽的實(shí)現(xiàn)可以使用Redisson來(lái)完成,Redisson。它是一個(gè)開源的Java Redis客戶端,可以將Redis的分布式對(duì)象封裝為Java類,并提供許多分布式算法和數(shù)據(jù)結(jié)構(gòu)。

@RedissonScalableCodec(codec = JsonJacksonCodec.class, codecClass = UserRepository.class, codecClasses = {YamlJacksonCodec.class})

public interface UserRepository extends RMap {

}

首先需要在Java代碼中定義一個(gè)用戶存儲(chǔ)的分布式對(duì)象,該對(duì)象是以鍵值對(duì)的方式存儲(chǔ)用戶信息并將其映射到虛擬槽上,它繼承了Redisson框架中的RMap接口和RedissonScalableCodec注解。這個(gè)對(duì)象使用了JsonJacksonCodec和YamlJacksonCodec類來(lái)提供兩種不同的編解碼器。JsonJacksonCodec和YamlJacksonCodec類都繼承了JsonNodeJacksonCodec類,它使用了Jackson來(lái)實(shí)現(xiàn)對(duì)象的序列化和反序列化。

通過(guò)RedissonClient接口來(lái)創(chuàng)建Redisson客戶端并使用該客戶端來(lái)獲取用戶存儲(chǔ)的對(duì)象,就可以使用該對(duì)象來(lái)存儲(chǔ)和檢索用戶信息,Redisson框架將把任意修改轉(zhuǎn)換為Redis命令并向Redis實(shí)例發(fā)送,實(shí)現(xiàn)了虛擬槽的數(shù)據(jù)存儲(chǔ)和高可用分片。

總結(jié):

使用虛擬槽可以很好地解決Redis的分片問(wèn)題,并且可以避免引起整個(gè)集群的故障。同時(shí)借助哈希環(huán)算法可以實(shí)現(xiàn)負(fù)載均衡。使用Redis虛擬槽的實(shí)現(xiàn)可以通過(guò)Redisson框架來(lái)完成,提供高可用分片的功能。

成都服務(wù)器租用選創(chuàng)新互聯(lián),先試用再開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡(jiǎn)單好用,價(jià)格厚道的香港/美國(guó)云服務(wù)器和獨(dú)立服務(wù)器。物理服務(wù)器托管租用:四川成都、綿陽(yáng)、重慶、貴陽(yáng)機(jī)房服務(wù)器托管租用。


新聞標(biāo)題:Redis的虛擬槽實(shí)現(xiàn)可擴(kuò)展的高可用分片(redis+虛擬槽)
分享地址:http://www.dlmjj.cn/article/dphcssg.html