zoukankan      html  css  js  c++  java
  • 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的数据是无用户状态的.即不会和某个用户绑定

     

  • 相关阅读:
    redis 日常使用
    centos7新装mysql 5.7
    spring 的常用功能
    软件安装教程
    每日成长17年1月
    ubuntu下不用拔盘就可以重新识别usb设备
    使用Linux遇到的一些问题和解决方案
    在XEN上启动guest时loopback设备不足
    使用virtualenv搭建python虚拟开发环境
    Linux局域网登陆响应时间过长
  • 原文地址:https://www.cnblogs.com/fanglove/p/3131485.html
Copyright © 2011-2022 走看看