redis的分布式原理及連線池

2022-07-01 17:57:10 字數 1565 閱讀 4338

redis的分布式結構

資料分片

將計算後的資料分成的不同部分,儲存在不同的資料節點中叫做資料分片

hash取餘公式

(key.hashcode()&integer.max_value)%n

括號中的是正整數,n 是分片的節點個數

@test

@test

public

void

test05()

else

if(n==1)

else

}system.out.println("是的概率:"+count/1000.0);

}

jedis的分片物件

shardedjedis

@test

@test

public

void

test06()

hash一致性,基於乙個雜湊計算的數學計算方法實現

任何計算機中的物件都可以通過雜湊方法獲取乙個整數值,整數區間[0,2^32-1]

這個整數區間--hash環

節點對映關係

ip+port在記憶體中儲存為乙個字串

這個字串通過雜湊計算,在hash環上對映成乙個整數值

key值的對映

先做key的整數對映

key值不變,結果整數同乙個

資料分片計算方法

通過找到key值的對應節點關係,尋找key對應的節點

順時針尋找最近的節點整數

資料平衡性(權重)

虛擬節點:

key順時針尋找最近節點,對應到虛擬節點後,從虛擬節點和真實節點的關係找到真實節點

只要虛擬節點數量夠多,平衡心越高

==hash取餘==,一種目前比較成熟的計算分片方法,但是在redis結構中不適合

因為造成redis集群擴容,縮容時資料遷移量過大的問題;

hash取餘的計算方法造成擴容的遷移量過大,不遷移造成雪崩

==hash一致性演算法==,從已有的對映關係環上新增新的節點,節點數量越多,弧線越短(key值量越少);

節點越多,做擴容,縮容時需要遷移的資料量就越少----少到一定程度是,就不需要遷移了

虛擬節點的個數,預設是160*weight,weight預設值時1

按照預設值計算分片 比重1:1:1

@test

@test

public

void

test07()

Redis分布式鎖原理及實現

ps 該篇博文目錄為 redis分布式鎖使用 中的 有瑕疵,為避免錯誤使用,請移步 感興趣的也可以看看到底瑕疵在哪 解決問題 多個程序多台機器,對乙個資料進行的操作的互斥。比如,下訂單和扣庫存的操作,這兩個操作必須連貫,乙個執行緒執行完這兩個操作後,下面乙個執行緒才可以介入執行,如果同時併發執行,極...

redis分布式鎖原理

以redisson為例 rlock lock redissonclient.getlock key lock.lock timeoutsecond,timeunit.seconds 原則 1.自己加的鎖自己釋放,2.鎖到期了業務沒執行完還需續期 if redis.call exists keys 1...

redis分布式鎖原理

舉例子 秒殺方式看醫生,乙個人看5min 1.第一次只允許乙個人直接進行來,x10 00 00進去了,setnx roomid,now 5min 出來時間假如是10 05 00 2.時間到了10 05 00,3個人同時進來,需要去看牆上的鐘錶,乙個人乙個的看 a進入病房看到,看到鐘錶時間10 05 ...