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的数据是无用户状态的.即不会和某个用户绑定