解析php中memcache的应用

所需环境:

  php 5.3.3

  apache 2.2.7

  mysql 5.5.8

  相关文档下载:点击下载

  解压Memcached_1.2.5文档,cmd下执行memcached.exe -d -install

  将php5.3_vc6_memcachedll文档解压,将php_memcache.dll文件复制到php安装目录的ext文件目录中。

  然后在php.ini 当中填上这句话:extension="php_memcache.dll"

  在phpinfo()下查看,是否引用了memcache扩展。

  测试代码:

  

复制代码 代码如下:

  <?php

  //连接

  $mem = new Memcache;

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

  //保存数据

  $mem->set('key1', 'This is first value', 0, 60);

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

  echo "Get key1 value: " . $val ."<br />";

  //替换数据

  $mem->replace('key1', 'This is replace value', 0, 60);

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

  echo "Get key1 value: " . $val . "<br />";

  //保存数组

  $arr = array('aaa', 'bbb', 'ccc', 'ddd');

  $mem->set('key2', $arr, 0, 60);

  $val2 = $mem->get('key2');

  echo "Get key2 value: ";

  print_r($val2);

  echo "<br />";

  //删除数据

  $mem->delete('key1');

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

  echo "Get key1 value: " . $val . "<br />";

  //清除所有数据

  $mem->flush();

  $val2 = $mem->get('key2');

  echo "Get key2 value: ";

  print_r($val2);

  echo "<br />";

  //关闭连接

  $mem->close();

  $memcachehost = '192.168.10.1';

  $memcacheport = 11211;

  $memcachelife = 60;

  $memcache = new Memcache;

  $memcache->connect($memcachehost,$memcacheport) or die ("Could not connect");

  $query="select * from user limit 10";

  $key=md5($query);

  if(!$memcache->get($key))

  {

  $conn=mysql_connect("192.168.30.1","root","passwd");

  mysql_select_db(users);

  $result=mysql_query($query);

  while ($row=mysql_fetch_assoc($result))

  {

  $arr[]=$row;

  }

  $f = 'db';

  $memcache->add($key,serialize($arr),0,30);

  $data = $arr ;

  }

  else{

  $f = 'mem';

  $data_mem=$memcache->get($key);

  $data = unserialize($data_mem);

  }

  echo $f;

  echo "";

  //print_r($data);

  foreach($data as $a)

  {

  echo $a[user_id]._.$a[email];

  echo "";

  }

  ?>

  新闻系统的应用:

  

复制代码 代码如下:

  //==============memcache

  $memcachehost = '127.0.0.1';

  $memcacheport = 11211;

  $memcachelife = 60;

  $memcache = new Memcache;

  $memcache->connect($memcachehost,$memcacheport) or die ("Could not connect");

  //==============新闻

  $sql="SELECT id,title,left(title,16) as biaoti,date_time FROM `p_newsbase` where shenhe='1' order by id DESC limit 7 ";

  $query=$db->query($sql);

  $key=md5($query);

  while($row_news=$db->fetch_array($query)){

  $str=$row_news['biaoti'].$db->time_out($row_news['date_time']);

  $sm_news[]=array("name"=>$str,"title"=>$row_news['title'],"id"=>$row_news['id'],"date_time"=>$row_news['date_time']);

  }

  if(!$memcache->get($key)){

  $memcache->add($key,serialize($sm_news),0,$memcachelife);

  }else{

  $data_mem=$memcache->get($key);

  $sm_news = unserialize($data_mem);

  }

  $smarty->assign("sm_news",$sm_news);