2 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊
最簡(jiǎn)單的就是拉一個(gè)哈希函數(shù)出來(lái)(比如jshash,sdbmhash,或者直接用stl里頭對(duì)string的hash都可以):hash(key) % 10 => 給出機(jī)器的ID。存取都用這樣的規(guī)則,就沒(méi)有問(wèn)題了。
不過(guò)這種簡(jiǎn)單方式存在的問(wèn)題是,可用性和擴(kuò)展性降低了。任意一臺(tái)機(jī)器掛掉,相應(yīng)的數(shù)據(jù)就沒(méi)地方存,不能自動(dòng)保存到其他機(jī)器。新增機(jī)器的時(shí)候也很麻煩。

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
使用哈希算法是必然的,就是要看對(duì)什么做哈希
如果你的存的時(shí)候是不帶Key的,也就是說(shuō),存入一個(gè)值,緩存服務(wù)器返回一個(gè)Key,下一次訪問(wèn)使用這個(gè)返回的Key取值??梢杂胢icrotime對(duì)緩存機(jī)器數(shù)取模。
如果你存的時(shí)候是帶Key的,就比較麻煩了,因?yàn)橐WC一致性,我用過(guò)一個(gè)辦法是對(duì)md5做折疊。
就是對(duì)你預(yù)設(shè)的Key做一次md5,得到一個(gè)32位的字符串,然后把字符串中間對(duì)折,做16進(jìn)制加法,得到一個(gè)較小的數(shù)字(可以對(duì)折多次,得到足夠小的數(shù)字,如果不做對(duì)折,直接做截取也可以,目標(biāo)就是把大數(shù)字變?。缓笥玫玫降倪@個(gè)數(shù)字對(duì)機(jī)器數(shù)取模,這樣可以保證一致性。下一次用這個(gè)Key還可以用相同的算法定位到某臺(tái)機(jī)器
- 2 回答
- 0 關(guān)注
- 142 瀏覽
添加回答
舉報(bào)