php之memcache缓存技术

1.memcache:是一个高效的分布式内存对象缓存系统

2.  IES---请求--->服务器(apace) |

  |              |---->会查看memcache.是否有IES想要的内容-->|

  |                      |               |--->有,从memcache中取到内容,返回IE

      |                         |                 |--->没有,去数据库取,取到后添加到memcache中。返回IE

   多用户                                             多个memcache(分布式)

3.安装memcached server.

①下载memcached.exe

②在cmd模式下,进入memcached.exe所有目录,输入以下命令,来安装服务

memcached.exe -d install

③再输入以下命令,启动服务

memcached.exe -d start

④输入netstat -an 确定11211端口是否打开。11211是memcached 服务的端口

TCP    0.0.0.0:11211          0.0.0.0:0              LISTENING

⑤到第④步,就可以通过telent 127.0.0.1 11211 来对memcached 服务进行增删改查了,不过我现在主要介绍php环境下如何使用memcache缓存,所以还得继续

⑥把php_memcache.dll拷到php环境下的ext目录下

⑦然后找到php.ini,添加extension=php_memcache.dll

⑧大功告成,可以写程序来验证一下

4.php下的memcache 扩展例子,直接上代码

方法参考:这里

memcache1.php的代码

 1 <?php
 2 require_once 'Stu.php';
 3 //实例化memcache
 4 $mem = new Memcache();
 5 //连接服务器,指定端口
 6 $mem->connect("127.0.0.1",11211);
 7 //添加存储内容 字条串
 8 $mem->add("name","dazhu",0,300);
 9 //添加存储内容 int
10 $mem->add("age",5,0,300);
11 //添加存储内容 boolean,取的时候,假如是false,什么也取不出来,假如是true,取出来为1
12 $mem->add("man",TRUE,0,300);
13 //添加存储内容 array
14 $arr = array("aa"=>"dazhu","bb"=>"afei");
15 $mem->add("names",$arr,0,300);
16 //添加存储内容 Stu對象
17 $stu = new Stu("DAZHU", 23);
18 $mem->add("stu",$stu,0,300);

memcache2.php的代码

 1 <?php
 2 require_once 'Stu.php';
 3 $mem = new Memcache();
 4 $mem->connect("127.0.0.1",11211);
 5 $name = $mem->get("name");
 6 echo $name."<br/>";
 7 $age = $mem->get("age");
 8 echo $age."<br/>";
 9 $man = $mem->get("man");
10 echo $man."<br/>";
11 $arr = $mem->get("names");
12 echo var_dump($arr)."<br/>";
13 $stu = $mem->get("stu");
14 echo $stu->name."的年齡為:".$stu->age;

其中Stu.php的代码

1 <?php
2 class Stu{
3     public $name;
4     public $age;
5     public function __construct($name,$age){
6         $this->name=$name;
7         $this->age= $age;
8     }
9 }

程序运行结果如下:

5.补充(见韩顺平课件):

①Socket套接字操作memcache缓存:memcached-client.php(函数).这种方法的特点如下:

  • 不需要开启memcache扩展
  • 2.使用fsockopen()套接字连接memcached
  • 3.同样执行执行CRUD

②基于c/s架构,协议简单

  • c/s架构,此时memcached为服务器端,我们可以使用如PHP,c/c++等程序连接memcached服务器。
  • memcached的服务器客户端通信并不使用XML等格式,而使用简单的基于文本行的协议。因此,通过telnet也能在memcached上保存数据、取得数据

③基于libevent的事件处理

  • libevent是一套跨平台的事件处理接口的封装,能够兼容包括这些操作系统: Windows/Linux/BSD/Solaris 等操作系统的的事件处理。
  • Memcached使用libevent来进行网络并发连接的处理,能够保持在很大并发情况下,仍旧能够保持快速的响应能力。

④内置内存存储方式

  • 为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。

⑤基于客户端的分布式

⑥将Session数据放入到Memcached

  • 保证memcache扩展开启,memcachd运行
  • 设置php.ini中session.save_handler=memcache
  • 设置php.ini中session.save_path=tcp://localhost:11211
  • 也可以通过php函数 ini_set() 函数在页面设置.

⑦Memcached的数据是无用户状态的.即不会和某个用户绑定

 

posted @ 2013-06-11 01:33  柱柱  阅读(533)  评论(0编辑  收藏  举报