百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>服务器> Linux安装配置memcached并启用PHP支持
分享文章到:

Linux安装配置memcached并启用PHP支持

发布时间:01/15 来源: 浏览: 关键词:
memcached算是一个缓存功能我们可以利用memcached来提升服务器及php的一个性能了,下面小编为各位整理一篇安装配置memcached并启用PHP支持操作教程。


最近在服务器上部缓存系统,记录一下PHP安装memcached扩展。

# 安装服务端

yum install memcached -y
I. launchpad

请于https://launchpad.net/libmemcached/+download下载目前最新版的libmemcached(20150524)

cd /tmp
wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
tar zxf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
./configure
make
make install

II. 安装memcached扩展

在PECL(The PHP Extension Community Library)找到并安装php的memcached扩展。

在PECL中你能找到以下两个容易混淆的memcache的PHP扩展,你能够分清楚他们的区别吗?你知道为什么我们要用前者吗?请读者紫星Google之!
memcached PHP extension for interfacing with memcached via libmemcached library
memcache memcached extension
[https://pecl.php.net/package/memcached][4] 目前最新版为2.2.0

mkdir /usr/src/php -p
cd /usr/src/php
wget https://pecl.php.net/get/memcached -O memcached-2.2.0.tgz
tar xf memcached-2.2.0.tgz
cd memcached-2.2.0
phpize

# 我们在配置的添加一些新的功能,使其支持json和igbinary,有空可以研究一下
./configure --enable-memcached --enable-memcached-json --enable-memcached-igbinary
make
make install

# 注意最后的输出
# Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
下面我们将其移
动到php的extension目录下

cp /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/*.so /usr/local/php/lib/php/extensions/

III. 配置PHP.ini

打开正在生效的php.ini文件

vim /usr/local/php/etc/php.ini

# 添加以下配置

[Memcached]
extension=memcached.so


php带有操作memcached的扩展,它提供一组函数来操作memcached服务器,将他们简单分一下类:

  1。memcached的连接函数(connect, pconnect)

  2。memcahced的操作函数(set, get, delete, replace, flush)

  3。多服务器配置函数(addServer)

  4。状态监控函数(getStats.....)

  下面摘一段代码,给大家一个直观的印象:(假设memcached安装在172.10.10.10上面,端口号12121)

$memcache = new Memcached();
$memcahce->connect('172.10.10.10', 12121);
$memcache->set('Key', 'Value');
$memcache->get('Key');

  上面的主要完成了memcached的简单操作流程:连接memcached服务器,设置值,取值('Key'的值是'Value');

  这里需要向大家说明一下addServer函数和connect函数,addServer是将多个服务器放在连接池,而connect只是将连接某一台服务器;如果在使用了addServer,再使用connect,这里就会只使用一台服务器。

  介绍了memcached的使用后,下面向大家介绍如何编写自己的php memcached的客户端。

  memcached是一个服务器端程序,我们自然可以使用php中的套接字程序来连接,并进行相应的通讯,完成数据的存储操作。要使用php和 memcached通讯,首先需要知道memcached的通讯协议,相关的信息可以在memcached的源码的doc/protocol.txt中找到。

  这里笔者使用get命令向大家展示一下这个过程

  这个命令主要是从数据中提取数据,输入格式: get key\r\n

  如果服务器没有这个值,则返回: END\r\n

  如果这个值存在,返回: VALUE key <标记> <数据长度> \r\n 数据块\r\n

  以下代码是简单模拟的客户端操作

$fp = fsocketopen('172.10.10.10', 12121, $errorno, $errstr, 1);
if(!$fp)
  echo "$errstr";
else
{
  $out = "get key \r\n";
  fwrite($out);
  while(!feof($fp))
    $str  . = fgets($fp);
  
  if(stripos($str, 'END') ===0)
    exit("NO value find")
  $arr = implode('\r\n', $str);
  echo $arr[1];
}

  简单解释上面的代码,使用fsocketopen打开服务器的socket通讯接口,然后向其发送get key命令, 然后获取返回的数据,并解析返回的数据。这里都没有做异常的处理,在编程的时候要填上


我们添加数据的时候,如果

bool Memcache::add ( string $key , mixed $var [, int $flag [, int $expire ]] )

如果报 expire 设为0 表示,永不过期.(只要memcache不重新启动,就永远在mem中)

exprie 直接给的是秒数,则最大 30*3600*24

如果你希望保持时间超过30  time()+天数*3600*24 即可

 


<?php

             

   //创建一个mem对象实例

       $mem=newMemcache;

    

       if(!$mem->connect("127.0.0.1",11211)){

              die('连接失败!');

       }

 

       //增加

 

       //1.增加一个字串

/*    if($mem->set('key1',"beijing",MEMCACHE_COMPRESSED,60)){

             

              echo'添加ok';

       }*/

//查询

 

       $val=$mem->get('key1');

 

       var_dump($val);

 

       //修改

       //可以使用replace

       if($mem->replace("key11",'hello',MEMCACHE_COMPRESSED,60)){

              echo'replace ok';

       }else{

              echo'replace no ok';

       }

 

 

 

       //删除

       echo"<br/>";

       if($mem->delete('key14')){

              echo'key14 删除';

       }else{

              echo'key14不存在';

       }

 

?>

分布式memcached测试:

<?php


//我的电脑上有两个memcahced服务.


$mem=new Memcache;


$mem->addServer('127.0.0.1',11211);
$mem->addServer('127.0.0.1',9999);
$mem->addServer('127.0.0.1',9998);

 

//这里注意,把key1,放入到 11211端口的mem还是
//9999 端口的mem就不要我们操心,有$mem对象本身维护.
if($mem->set('key1','hello',MEMCACHE_COMPRESSED,300)){
echo 'add ok!';
}
if($mem->set('key2','hello2',MEMCACHE_COMPRESSED,300)){
echo 'add ok!';
}
if($mem->set('key3','hello3',MEMCACHE_COMPRESSED,300)){
echo 'add ok!';
}


?>


总结:

1.      mem服务的数据不是同步的, 数据是分布的

2.      把什么数据放入到哪个memcached是由客户端的mem对象决定

3.      当执行addServer的时候,并不是立即去连接mem服务,而是通过计算,hash后才去决定连接哪个mem服务,因此当你大量加入服务器到连接池,没有多余开销

 

u      memcache的细节讨论

①    生命周期

从数据放入mem开始计时,直到时间到了,就销毁, 如果时间为0, 则表示不过期.

memcache的数据被销毁的情况如下:

1.      时间到

2.      重启memcached服务

3.      重启memcached服务所在的机器

4.      delete / flush 销毁数据

②    如何把session数据放入到memcached服务中.

步骤:

1.      修改php.ini的配置文件

如下:

;[sesson.save_handler有user|files|memcache]

session.save_handler= memcache

session.save_path= "tcp://127.0.0.1:11211"

③    测试一把,重启apache

测试ok

<?php

 

       //传统的代码

       session_start();

       $_SESSION['name']='天龙八部300';

       $_SESSION['city']='beijing';

       class Dog{

              public $name;

       }

 

       $dog1=new Dog;

       $dog1->name='abcde';

       $_SESSION['dog']=$dog1;

 

       //如果session数据入mem,那他一定是以session_id为

       //key值进行添加

      

       //取出

       $name=$_SESSION['name'];

       echo "name=$name";

       echo "sessionid=".session_id();

 

 

思考,如果管理员,不让我们修改php.ini 文件,我们如何处理session入memcached这个功能, 我们通过一个函数可以去修改 php.ini 的配置.

 

代码:

<?php

 

       ini_set("session.save_handler","memcache");

       ini_set("session.save_path","tcp://127.0.0.1:9999");

 

同时你也可以通过 ini_set 去动态的修改对php.ini 的其它设置 。但是他不影响其它php页面,也不会去修改php.ini 文件本身, 只对本页面生效.

 

 memcached vs session比较

memcached 主要的目的是提速 ,因此它是一种无状态的数据.即,数据不和用户绑定.

session数据是和绑定的,因此是一种有状态数据.

 

memached安全性

如何使用memcached 服务才是安全的.

 

在windows下通过启用防火墙来保护我们的memcached


在linux 也可以使用防火墙.

setup 配置防火墙

iptables -ainput -p tcp -s 127.0.0.1 -dport 11211 -j ACCEPT

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有2人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板