清除或者读写多机房缓存

清除或者读写多机房缓存

遇到一个问题(多机房,每个机房的缓存在不同的memcache服务器组):

1 我们有几个机房,每个机房的mc都不一样,我想提前给接口预热(在用户访问前加上缓存),前端肯定用到了负载均衡。如果我从后端机器上直接请求接口的话,只会落到某个机房的一台服务器上去。其他机房的数据不会变化

2 我不想读mc的配置,因为这个接口可能的实现里面本身需要去处理一些逻辑,读写几个mc的key,mc的key本书设计的不合理还内嵌在代码里面,比较繁琐。

我们可以使用http协议的特性。当然不限于php,其他语言也可以这么干。

我的流程:

1 通过ip访问接口 http://192.168.1.12/api http://111.123.13.12/api
2 在头部加上你需要反问的接口的域名  Host:i.api.com

具体的代码

function get($url, array $get = array(), array $options = array()) {
        $defaults = array(
            CURLOPT_URL    => $url . (strpos($url, '?') === FALSE ? '?' : '') . http_build_query($get, '', '&'),
            CURLOPT_TIMEOUT         => 20,
            CURLOPT_CONNECTTIMEOUT  => 15,
            CURLOPT_HEADER          => 0,
            CURLOPT_RETURNTRANSFER  => TRUE,
        );
        $ch = curl_init();
        curl_setopt_array($ch, ($options + $defaults));
        $result = curl_exec($ch);
        curl_close($ch);
        return $result;
}

$id = trim($argv[1]);

$cleanFunction = "api";
$params = array("page_id"=>$id);
$res2 = get('192.168.1.12/'.$cleanFunction,$params,array(CURLOPT_HTTPHEADER => array('Host:i.api.com')) );
$res3 = get('111.123.13.12/'.$cleanFunction,$params,array(CURLOPT_HTTPHEADER => array('Host:i.api.com')) );

原理:

我的请求会先打到这台服务器,在根据host访问对应的虚拟主机

虚拟主机

是在网络服务器上划分出一定的磁盘空间供用户放置站点、应用组件等,提供必要的站点功能与数据存放、传输功能。

虚拟主机的实现原理

虚拟主机是用同一个WEB服务器,为不同域名网站提供服务的技术。Apache、Tomcat等均可通过配置实现这个功能。

相关的HTTP消息头:Host。

例如:Host: www.baidu.com

客户端发送HTTP请求的时候,会携带Host头,Host头记录的是客户端输入的域名。

这样服务器可以根据Host头确认客户要访问的是哪一个域名。

推荐一篇关于http的文字写得很清晰http详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值