亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

假如我有十臺緩存服務器 ,談談php的具體實現方法

假如我有十臺緩存服務器 ,談談php的具體實現方法

PHP
嗶嗶one 2023-04-16 12:08:02
1:怎樣的算法可以將 一個數據均勻的分配到緩存服務器上,避免某一臺服務器壓力過高,2:然后怎樣從十臺緩存服務器中的某一臺讀取緩存數據;
查看完整描述

2 回答

?
森欄

TA貢獻1810條經驗 獲得超5個贊

最簡單的就是拉一個哈希函數出來(比如jshash,sdbmhash,或者直接用stl里頭對string的hash都可以):hash(key) % 10 => 給出機器的ID。存取都用這樣的規則,就沒有問題了。

不過這種簡單方式存在的問題是,可用性和擴展性降低了。任意一臺機器掛掉,相應的數據就沒地方存,不能自動保存到其他機器。新增機器的時候也很麻煩。

查看完整回答
反對 回復 2023-04-19
?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

使用哈希算法是必然的,就是要看對什么做哈希
如果你的存的時候是不帶Key的,也就是說,存入一個值,緩存服務器返回一個Key,下一次訪問使用這個返回的Key取值??梢杂胢icrotime對緩存機器數取模。

如果你存的時候是帶Key的,就比較麻煩了,因為要保證一致性,我用過一個辦法是對md5做折疊。
就是對你預設的Key做一次md5,得到一個32位的字符串,然后把字符串中間對折,做16進制加法,得到一個較小的數字(可以對折多次,得到足夠小的數字,如果不做對折,直接做截取也可以,目標就是把大數字變小),然后用得到的這個數字對機器數取模,這樣可以保證一致性。下一次用這個Key還可以用相同的算法定位到某臺機器


查看完整回答
反對 回復 2023-04-19
  • 2 回答
  • 0 關注
  • 131 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號