Rumah > php教程 > php手册 > php memcached缓存集群

php memcached缓存集群

WBOY
Lepaskan: 2016-06-06 19:53:36
asal
1182 orang telah melayarinya

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

}

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Cadangan popular
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan