为了账号安全,请及时绑定邮箱和手机立即绑定

假如我有十台缓存服务器 ,谈谈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取值。可以用microtime对缓存机器数取模。

如果你存的时候是带Key的,就比较麻烦了,因为要保证一致性,我用过一个办法是对md5做折叠。
就是对你预设的Key做一次md5,得到一个32位的字符串,然后把字符串中间对折,做16进制加法,得到一个较小的数字(可以对折多次,得到足够小的数字,如果不做对折,直接做截取也可以,目标就是把大数字变小),然后用得到的这个数字对机器数取模,这样可以保证一致性。下一次用这个Key还可以用相同的算法定位到某台机器


查看完整回答
反对 回复 2023-04-19
  • 2 回答
  • 0 关注
  • 67 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信