memcached安装使用

l  memcached 的基本概念

memcached 是一个高效的分布式的内存对象缓存系统 ,他可以支持把各种php的数据(array,对象,基本数据类型)放入到它管理的内存中.

 使用memached的好处是什么?

针对上面的的要求有三种方案

1.      传统的方法

<?php

              $stu_id=$_GET[‘stu_id’];

 

              //查询数据库

 

              smaryt->assign(“view”);

 

 

?>

 

2.      页面静态化

<?php

 

              $stu_id=$_GET[‘stu_id’];

              $html_file=”stu_id1.html”

              if(file_exitsts($html_file)){

       //显示

       exit

}

              //查询数据库

              //缓存.

 

              smaryt->assign(“view”);

 

?>

 

3.      使用内存缓存

<?php

              $stu_id=$_GET[‘stu_id’];

              //到memcached缓存中,看看有没有学生信息

              $mem=newMemcache;

              if($info=$mem->get($stu_id)){

       //取出学生信息

       echo $info;

       exit

}

//到数据库查询

ob_start();

$conn=....

.....

echo “..”;

//把从数据库中获取的结果,放入memcache中

              $mem->add($stu_id,ob_get_contents(),MEMCACHE_COMPRESSED,60*60*24);

?>

 

访问速度

数据库<文件<内存

 

u  原理图

 

 

u  安装步骤

 

①下载memcached软件

②将memcached软件拷贝到某个目录,最好放在php开发环境目录下,便于管理

③安装  memcached.exe –d install [卸载使用 memcached.exe -d uninstall]

④启动 memcached 服务

(1)直接通过界面启动该服务

(2)在控制台下启动 memcached.exe –d start   [命令一览表]

⑤查看memcached 服务是否启动成功! 默认端口11211

 

 

我们一起看看memcached常用的命令.

 

特别说明;如果你的网站,需要的memcached 的内存大于64m,应当这样启动

memcached –m 256m –d start   LRU

如果你希望换一个端口

memcached -d -m 30 -l 127.0.0.1 -p 9000 -dstart


 

面试题,请举例5个常用端口

80 apache/iis

21 ftp

23 telnet

3306 mysql

1521 oracle

1433 sql server

8080 tomcat


使用方法

 

1.telnet -----> memcached缓存系统 (教学作用,实际意义不大)

 

crud (create/read/upate/delete)

 

添加:

1.      连接到memcached

telnet 192.168.1.100 11211

add name 0 60 5     [说明 add 是指令名  name 是key的名字 (是以key/value存放), 0 标志, 60 表示数据存放 60s   5表示放入多大数据 ], 如果一个key已经存在,再放入是失败的.

 

get name [获取 name的值]

 

 

//更新

set name 0 60 5   [如果 name 这个key存在,就是更新, 如果key不存在,就是添加]

//删除

delete key值

 

 

//其它用法看手册

 

 

2.使用memcache 扩展(一堆函数)来操作 memcached缓存系统

 

①     在php.ini 中配置extension


这里一定要注意添加的php_memcache.dll文件的版本,我的wamp环境是要32位的PHP5.5的版本。也要注意wamp开发环境的PHP配置文件php.ini是在Apache/bin目录下

放入到php/ ext /目录

②     打开extension

;这里启用memcache.dll扩展

extension=php_memcache.dll

③     编程测试

函数参考,PHP手册


代码(测试放入php的各种数据类型)

<?php

 

              //1.实例化一个Memcache对象

              $mem=new Memcache;

 

              //2. 连接到指定的memcache中

              $mem->connect("127.0.0.1",11211);

              //0表示不压缩数据,如果使用压缩MEMCACHE_COMPRESSED

              if(!$mem->add("name","shunping",0,30)){

                     echo "有哥们放入了";

              }else{

                     echo "ok!";

              }

 

              //可以放入数值

              if(!$mem->add("age",100,0,30)){

                     echo "age有哥们放入了";

              }else{

                     echo "ok!";

              }

 

              //可以放入boolean

 

              if(!$mem->set("ok",true,0,30)){

                     echo "ok有哥们放入了";

              }else{

                     echo "ok!";

              }

 

              //放入数组

 

              $arr1=array("aa"=>"北京","bb"=>"天津");

             

              //对数组进行序列化,在网络传输的时候,为了保证,数据类型的不丢失,

              //先序列化,再发生.

              //$arr1=serialize($arr1);

 

              $arr2=json_encode($arr1);

              print_r($arr2);

             

 

              $mem->add("arr",$arr1,MEMCACHE_COMPRESSED,100);

 

              //对象

 

              require"Person.class.php";

 

              $person=newPerson(10,"xiaoming");

 

              $mem->add("per1",$person,MEMCACHE_COMPRESSED,100);

 

 

              //取出

              $per2=$mem->get("per1");

 

              var_dump($per2);

              echo "对象名字=".$per2->name;

 

              //string,int,float, boolean  array object nullresource

             

 

              //不能把resource 类型放入到memcache

              $con=mysql_connect("localhost","root","root");

 

              echo"<br/>";

              var_dump($con);

 

              $mem->add("mylink",$con);

 

             

 

?>   

.

 

代码: 用于获取各种数据

<?php

 

       //获取

       $mem=newMemcache;

       $mem->connect("localhost",11211);

       if($val=$mem->get("name")){

              echo"val=$val";

       }else{

              echo"没有这个值";

       }

 

 

       /*获取数值*/

       if($val=$mem->get("age")){

              echo"age=$val";

       }else{

              echo"没有这个值";

       }

       /*布尔值*/

       echo"<br/>";

       $val=$mem->get("ok");

      

       echo"ok=$val";

 

       echo"<br/>";

 

       $arr1=$mem->get("arr");

 

       echo"<pre>";

       var_dump($arr1);

       echo"</pre>";

 

       echo"<br/>对象的值..";

              require"Person.class.php";

       //取出

              $per2=$mem->get("per1");

              var_dump($per2);

              echo"对象名字=".$per2->name;

       echo"<br/>连接";

       var_dump(      $mem->get("mylink"));

?>

 

结论: //string,int,float, boolean  array object nullresource 中除了 resource 不能存放,其它都可以.

 

分析memcache价值

 

 

补充: 关于如何使用多个memcached 缓存服务器.

<?php

 

       $mem=newMemcache();

 

       //如果我们网站,需要多个memached缓存系统.

       //$mem->connect("localhost",11211);(立即向localhost的11211端口发出连接)

       $mem->addServer("192.168.1.100",11211);//256->10m

       $mem->addServer("192.168.1.200",11211);

       $mem->addServer("192.168.1.222",11211);

       //创建多个memcache服务使用.

      

 

       $mem->add("name","zs",0,100);

 

?>

 

 

 

3.使用socket来操作我们的memcached缓存系统

 

代码:

 

<?php

 

              require"memcached-client.php";

 

              $mc= new memcached(array(

               'servers' =>array('127.0.0.1:11211'), //如果有多个memcached服务器使用可以使用,号间隔添加

              'debug'   => false,

               'compress_threshold' =>10240,

               'persistant' => true));

 

       $mc->add('key','顺平');

//     $mc->replace('key','some random string');

       $val= $mc->get('key');

             

              echo"key=".$val;

?>

 

面试题: 请说明memcached 机制:

1.      是c/s结构,使用简单文本通讯

2.      基于libevent处理并发

3.      是内存缓存

4.      基于客户端的分布式

5.       

6.      .

 

 

php程序(1. memcache 扩展  2. memcached 扩展 (php_memcached.dll), 3. 使用socket访问) ---->memcachd 缓存系统

 

 

u  memcached 的细节

1.       生命周期, 是在add 数据的时候指定的.

2.      如何配置,将session数据,自动保存到memcached服务器中.

 

思路 : 在默认情况下 session 数据是放在文件中. c:/windows/temp

 

步骤:

①     在php.ini 文件中

;把session数据放入memcache

session.save_handler = memcache

;这里指定放到哪个memcached服务器

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

 

使用

<?php

              session_start();

              $_SESSION['name']='xiaohong';  

              //现在我们希望把session数据放入到memcached缓存系统中.

              echosession_id()."<br/>";           

              echo$_SESSION['name'];

?>

 

小结: 我们只需要在php.ini中作一个配置,然后再使用session时候,还是老规矩,只是这个时候,我们的session数据,已经放到memcached中

 

u  memcache的安全性

 

windows 下,设置防火墙.

 

原理图:

linux下

iptables -a input -p 协议 -s 可以访问ip -dport 端口 -j ACCEPT

 

 

小结如何使用memcached的因素:

 

--我自己的一个小结如何决定是否使用memcached

--如果是一个小网站,pv值不大,就不考虑使用memcache了

--变化频繁,查询频繁,但是不一定写入数据库(适合memcached)(用户在线状态.)

--变化频繁, 一变化就要入库[比如股票,金融.](不适合memcached)

--变化不频繁,查询频繁,不管如不入库,都比较适合memcache。(新浪的新闻频道)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值