• 技术文章 >php教程 >php手册

    php memcached缓存集群

    2016-06-06 19:53:36原创529

    一、需求描述 一linode xen vps 1G RAM,40sites,IO频繁,openfilesulimit已65535 US时间访问量大增,nginx不定时502 二、解决办法 pages cache化,但这一台vps内存不够用,于是把闲置的几台服务器都装上memcached做缓存集群 再根据网络延迟设定权重 memcache

    一、需求描述

    一linode xen vps 1G RAM,40+sites,IO频繁,openfiles ulimit已65535

    US时间访问量大增,nginx不定时502

    二、解决办法

    pages cache化,但这一台vps内存不够用,于是把闲置的几台服务器都装上memcached做缓存集群

    再根据网络延迟设定权重

    memcached server官方: http://memcached.org/

    三、代码

    访问memcached server需要php支持,可以选择memcached库和memcache库,注意2者名字的区别

    详细对比:https://code.google.com/p/memcached/wiki/PHPClientComparison

    我采用的是php memcache: http://php.net/manual/en/book.memcache.php 因为memcache不依赖libmemcached

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    //集群数组

    $memserver = array(

    array( 'host' => 'fast1.xxx.com' , 'port' => 13579 , 'weight' => 40 ),

    array( 'host' => 'fast2.xxx.com' , 'port' => 13579 , 'weight' => 20 ),

    array( 'host' => 'fast3.xxx.com' , 'port' => 13579 , 'weight' => 20 ),

    array( 'host' => 'slow1.xxx.com' , 'port' => 24680 , 'weight' => 5 ),

    array( 'host' => 'slow2.xxx.com' , 'port' => 24680 , 'weight' => 5 ),

    array( 'host' => 'local.xxx.com' , 'port' => 11211 , 'weight' => 10 )

    );

    键值读、写、删就没什么说的了直接按文档sample写即可
    考虑到以后的移植问题,记得首先检测环境是否支持memcache: class_exists(‘Memcache’)
    下面是我的实现,因为特定需求,几个函数写的相对独立,memcache也没做全局实例化。
    你可以根据自己需求把memcache在全局实例化,优化操作。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    //---get content from memcache---

    function getCache( $key )

    {

    Global $memserver;

    $ret = false;

    $key = md5( $key );

    $mc = new Memcache();

    foreach ( $memserver as $s )

    $mc->addServer( $s['host'], $s['port'], FALSE, $s['weight'] );

    $ret = $mc->get( $key );

    $mc->close();

    unset( $mc );

    return $ret;

    }

    //---set content from memcache---

    function setCache( $key, $val )

    {

    Global $memserver;

    $ret = false;

    $key = md5( $key );

    $mc = new Memcache();

    foreach ( $memserver as $s )

    $mc->addServer( $s['host'], $s['port'], FALSE, $s['weight'] );

    if( isset($val['cached']) )

    {

    $val['cached'] = 1;

    $ret = $mc->set( $key , $val);

    }

    $mc->close();

    unset( $mc );

    return $ret;

    }

    //---delete content from memcache---

    function delCache( $key )

    {

    Global $memserver;

    $ret = false;

    $key = md5( $key );

    $mc = new Memcache();

    foreach ( $memserver as $s )

    $mc->addServer( $s['host'], $s['port'], FALSE, $s['weight'] );

    $ret = $mc->delete( $key , 0);

    $mc->close();

    unset( $mc );

    return $ret;

    }

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:PHP中刷新输出缓冲详解 下一篇:windows下搭建apache http server、php、mysql开发环境
    Web大前端开发直播班

    相关文章推荐

    • 在WAS CE上运行PHP• Mysql和网页显示乱码解决方法集锦• php.ini 中文版• PHP数据库开发知多少• 刷新PHP缓冲区为你的站点加速
    新人一分购

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网