首頁 >php教程 >php手册 >php memcached缓存集群

php memcached缓存集群

WBOY
WBOY原創
2016-06-06 19:53:361184瀏覽

一、需求描述 一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