实用技能--根据不同的key 分配到不同的memcached,redis服务器

memcached,redis 都是key-value 的形式存储数据,如果为了分担缓存数据库的压力,将不同的数据存储到的不同的服务器,而且不管怎么样,编号都是固定的,以下是解决问题的代码

$key_str = "mc_user_pos_info_3274798";

$serverList = array(
    array("127.0.0.1", 6375),
    array("127.0.0.1", 5678),
    array("127.0.0.1", 5673),
    array("192.168.100.1", 5673),
);

$hashRingNumber = count($serverList);

$scopeNumber = vsprintf('%u', 4294967296 / $hashRingNumber);    // 按 4294967296(0 ~ 2^32) 分成N份,每份的值范围

$computedHashCode = vsprintf('%u', crc32($key_str));              // 计算 key_str 的循环冗余校验码

var_dump($scopeNumber);
var_dump($computedHashCode);

$position = ceil($computedHashCode / $scopeNumber) - 1;            // 计算 key_str 的循环冗余校验码落在哪个区间内

var_dump($position);

var_dump($serverList[$position]);
string(10) "1073741824"
string(10) "4046273907"
float(3)
array(2) {
  [0]=>
  string(13) "192.168.100.1"
  [1]=>
  int(5673)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值