2014-01-30 11:13:40 关键词:php程序操作memcached详细分析,贵阳网站建设 毕业设计 贵阳网站建设

《一步一步跟我学PHP》第70讲:php程序操作memcached详细分析

来源: 百优资源网 作者:管理员

核心提示:通过telnet可以操作memcached,通过PHP程序设计语言也可以操作memcached,给贵阳网站建设朋友提供了非常方便的网站建设服务。本文对这些内容进行详细讲解。
已被点击
查看
收藏
  • 开心网
  • 人人网
  • i贴吧
分享
分享

| 服装连锁店ERP管理系统

服装连锁店ERP管理系统可以高效完成物流配送,考勤管理,工资管理,员工管理,报表管理,陈列管理等功能,是服装连锁企业理想的选择。[详细]

手动刷新 更新时间:14:08:37
---------------------------------------------

---------------------------------------------

第70讲:php程序操作memcached详细分析
描述:通过telnet可以操作memcached,通过PHP程序设计语言也可以操作memcached,给贵阳网站建设朋友提供了非常方便的网站建设服务。本文对这些内容进行详细讲解。

一、memcached基本概念
    Memcached是为了加速 LiveJournal访问速度而开发的,是一种缓存技术,他可以把数据放入内存以提高访问速度。内存中的表的结构是key和value的键值对,可以存放字串、数值、数组、对象、布尔、二进制数据、null等类型,但不能存放资源类型。

二、php程序操作memcached服务步骤
    步骤1:把 php_memcache.dll 文件拷贝 php的ext 下。不同版本的php所使用的 php_memcache.dll 的版本不一样。
    步骤2:修改php.ini文件,加载 php_memcache.dll (该文件就是封装了一堆函数)。
extension=php_memcache.dll
    步骤3:重新启动apache。
    步骤4:写程序来完成curd操作。
三、PHP操作memcached注意事项
    我们添加数据的时候,bool Memcache::add ( string $key , mixed $var [, int $flag [, int $expire ]] ),如果expire 设为0 表示,永不过期。(只要memcache不重新启动,就永远在mem中)。exprie 直接给的是秒数,则最大 30*3600*24(即最长时间是30天)。如果你希望保持时间超过30,可以用time()+天数*3600*24 即可。切记前面要加time()。
安全代码:
mem1.php
<?php
    //创建一个mem对象实例
 $mem=new Memcache;
 if(!$mem->connect("127.0.0.1",11211)){
  die('连接失败!');
 }
 //增加
 //1.增加一个字串
/* if($mem->set('key1',"beijing",MEMCACHE_COMPRESSED,60)){
  echo '添加字串成功';
 }*/
 //2.添加数值
/* if($mem->set('key1',100,MEMCACHE_COMPRESSED,60)){
  
  echo '添加数值ok';
 }*/
 //3.添加数组
 //在添加数组是根据需要. 希望序列化放入。
 //serialize<=>unserialize, 如果根据需要,也可以json_encode <=> json_decode
 $arr=array("bj",'tj');
 if($mem->set('key1',$arr,MEMCACHE_COMPRESSED,time()+31*3600*24)){
  echo '添加数组ok99111';
 }
 //4.添加对象
/* class Dog{
  public $name;
  public $age;
  public function __construct($name,$age){
   $this->name=$name;
   $this->age=$age;
  }
 }
 $dog1=new Dog('小狗',50);
 if($mem->set('key1',$dog1,MEMCACHE_COMPRESSED,60)){
  echo '添加对象ok';
 }*/
 //5.添加null 布尔值
/* if($mem->set('key1',false,MEMCACHE_COMPRESSED,60)){
  echo '添加布尔ok';
 }*/
 //6. 资源类型放入.
/* $con=mysql_connect("127.0.0.1","root","root");
 if(!$con){
  die('连接数据库失败');
 }
 var_dump($con);
 echo "<br/>";
 if($mem->set('key1',$con,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不存在';
 }
mem2.php程序设计源代码:
<?php
 //这个文件去操作memcached服务
  //创建一个mem对象实例
 $mem=new Memcache;
 if(!$mem->connect("127.0.0.1",11211)){
  die('连接失败!');
 }
 //在另外文件中取出对象时,有个注意的地方,对于php5.2这个版本会提示错误,
 //对php5.3这个版本会提示 incomplete 信息, 解决方法是声明类定义即可。
 class Dog{
  public $name;
  public $age;
  public function __construct($name,$age){
   $this->name=$name;
   $this->age=$age;
  }
 }
 $dog=$mem->get('key1');
 var_dump($dog);

四、serilize 和 json_encode用法
    什么时候使用serilize 什么时候使用json_encode [ajax配合]
<?php
/* class Dog{
  public $name;
  public $age;
  public function __construct($name,$age){
   $this->name=$name;
   $this->age=$age;
  }
 }
 $dog2=new Dog('小黄',40);
 //我希望把这个对象保存到磁盘. ->serilize
 file_put_contents("d:/my.log",serialize($dog2));
 echo 'save ok!';
 $dog=unserialize(file_get_contents("d:/my.log"));
 echo "<br/>";
 echo $dog->name;
 $arr=array('city1'=>"bj",'city'=>"tj");
 file_put_contents("d:/my2.log",json_encode($arr));*/
 $host="127.0.0.1:1134";
  list ($ip, $port) = explode (":", $host);
  echo $ip."===".$port;
?>
 

五、使用PHP源码通过memcached-client操作memcached
     如果管理员不让我们去加载 memcache.dll 文件,我们可以直接通过源码操作。
代码mem3.php
<?php
 require_once 'memcached-client.php';
    $mc = new memcached(array(
               'servers' => array('127.0.0.1:11211'), //连接的memcacheip和端口
               'debug'   => false, //是否debug
               'compress_threshold' => 10240, /*最大压缩*/
               'persistant' => true)); /*是否是持久连接*/
   $mc->set('key1', array('some', 'array'));
 // $mc->replace('key', 'some random string');
   $val = $mc->get('key1');
 var_dump($val);
 //修改
 $mc->replace('key1', "北京");
 $val = $mc->get('key1');
 var_dump($val);
 //删除
 $mc->delete('key1');
  $val = $mc->get('key1');
 echo "删除后";
 var_dump($val);
?>


六、 memcache的数据是放入到内存,并且在数据爆满的情况下,使用LRU 算法删除。
七、memcached是基于分布式的
    memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。各个memcached不会互相通信以共享信息。那么,怎样进行分布式呢?这完全取决于客户端的实现。
如图:

软件设计,贵阳网站建设

写段代码说明: mem4.php
<?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);
 $mem->addServer('127.0.0.1',9997);
 $mem->addServer('127.0.0.1',9996);
 //这里注意,把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!';
 }
mem5.php 取出.
 <?php
 //如何从多个mem中取出你的key?
 $mem=new Memcache;
 $mem->addServer('127.0.0.1',11211);
 $mem->addServer('127.0.0.1',9999);
 $val=$mem->get('key1');
 echo '程序中取出分布的值='.$val;
注意事项:
(1)mem服务的数据不是同步, 数据是分布的。
(2)把什么数据放入到哪个memcached是由客户端的mem对象决定。
(3)当执行addServer的时候,并不是立即去连接mem服务,而是通过计算,hash后才去决定连接哪个mem服务,因此当你大量加入服务器到连接池,没有多余开销。

八、如何把session数据放入到memcached服务中
步骤:修改php.ini的配置文件
;[sesson.save_handler 有user|files|memcache]
session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"
测试时重启apache
<?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修改权限时的处理
    如果管理员,不让我们修改 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 文件本身, 只对本页面生效。

【推荐阅读】
 软件设计和网站建设策略分析
 第58讲:PHP smarty模板中内建函数
 第59讲:PHP smarty模板中自定义函数
 第60讲:PHP smarty配置文件、常量、变量
 第61讲:PHP smarty方法、高级特性
 第62讲:PHP中zend framework原理分析
 第63讲:PHP中zend framework和数据库整合 
 第64讲:PHP中zend framework实例——投票系统
 第65讲:PHP中zend framework Zend_Db_Table详解
 第66讲:PHP中zend framework 实例——购物车
 第67讲:php数据库编程陷阱详解
 第68讲:php中memcached缓存技术的原理及安装
 第69讲:php中memcached缓存技术的操作及安全性
 第70讲:php程序操作memcached详细分析

声明:本站内容凡注明"来源:百优资源网"的所有文字、图片等资料,版权均属百优资源网原创,任何媒体、网站或个人不得转载、链接、转贴或以其他方式复制发布/发表。本网站部分资源来源于网络,如果有侵犯你的权利,请联系本站删除。

网友评论
用户名 密码 自动登录 登录
*网友评论仅供其表达个人看法 发表评论
  • 软件设计 196
    使用VC++加载图片技巧

    软件设计 | 使用VC++加载图片技巧

    在界面添加图片,在VB、delphi等软件设计语言中很简单,但是在VC++中是很难实现,这过程不但要对图片进行导入,还要显示,最后要清除内存。下面小编对这个方法进行了整理,直接复制就可以实现使用VC++加载图片技巧了。

    毕业设计 683
    毕业设计论文智能管理系统设计的意义

    毕业设计 | 毕业设计论文智能管理系统设计的意义

    毕业设计(论文)是高等院校人才培养过程中不可或缺的重要环节,一直受到各高等学校的高度重视。毕业论文网上管理是高校信息化的一个重要体现,本文对毕业设计论文智能管理系统设计的意义进行介绍。

    毕业论文 812
    西昊人体工学椅 重新定义“好椅子”的标准

    毕业论文 | 西昊人体工学椅 重新定义“好椅子”的标准

    高端椅业领导者西昊人体工学电脑椅以其极具人性关怀的产品对好椅子的标准进行了重新定义。西昊人体工学椅创办于1999年,一直专注于人体工学椅的研发、制造和销售,最初产品主要销往欧美

860010-1102010400