1:怎樣的算法可以將 一個數據均勻的分配到緩存服務器上,避免某一臺服務器壓力過高,2:然后怎樣從十臺緩存服務器中的某一臺讀取緩存數據;
2 回答

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

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