2 回答

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

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