yikai.shao Backend Dev Engineer

memcache分布式缓存


配置memcache集群步骤

安装

sudo apt-get install -y php5-memcache

记得重启apache

开启服务

memcached -p 11211 start
memcached -p 11311 start

php操作memcache缓存实例

<?php

header("Content-type:text/html;charset=utf-8");

$arr = array(
    array("host" => "127.0.0.1", "port" => 11211, "weight" => 40),
    array("host" => "127.0.0.1", "port" => 11311, "weight" => 60),
);
$mem = new Memcache;
foreach ($arr as $ele) {
    $mem->addServer($ele["host"], $ele["port"], true, $ele["weight"]);
}

// 将数据set进memcache
for ($i = 0; $i < 10; $i++) {
    // 由于使用了分布式(addServer),所以这里不需要使用connect或者pconnect打开链接
    // set方法会调用memcache的分布式缓存分配算法
    // 按照权重将缓存项缓存到连接池的某个服务器
    if ($mem->set($i, $i, 0, 3600)) {
        echo "缓存成功:key:$i,value:$i";
    } else {
        echo "缓存失败";
    }
    echo "<br/>";
}

// 将数据从memcache中get出来
for ($i = 0; $i < 10; $i++) {
    $val = $mem->get($i);
    if (false === $val) {
        echo "缓存获取失败";
    } else {
        echo "缓存获取成功:key:$val,value:$val";
    }
    echo "<br/>";
}


执行结果

缓存成功:key:0,value:0
缓存成功:key:1,value:1
缓存成功:key:2,value:2
缓存成功:key:3,value:3
缓存成功:key:4,value:4
缓存成功:key:5,value:5
缓存成功:key:6,value:6
缓存成功:key:7,value:7
缓存成功:key:8,value:8
缓存成功:key:9,value:9
缓存获取成功:key:0,value:0
缓存获取成功:key:1,value:1
缓存获取成功:key:2,value:2
缓存获取成功:key:3,value:3
缓存获取成功:key:4,value:4
缓存获取成功:key:5,value:5
缓存获取成功:key:6,value:6
缓存获取成功:key:7,value:7
缓存获取成功:key:8,value:8
缓存获取成功:key:9,value:9

总结

  1. 保存的时候,set方法会将数据根据weight权重保存到某一个memcached服务器

  2. 取出数据时,get方法会根据相同的路由规则,去相应的服务器上取出数据

  3. 当某一个memcache服务down掉的时候,存放到此服务器中的数据会丢失,这时候需要重新从数据源获取。


下一篇 nginx负载均衡

概要