当前位置: > Linux服务器 > 环境配置 >

将session存储memcache缓存中

时间:2015-09-21 00:01来源:linux.it.net.cn 作者:IT
在将session存储memcache缓存之前,先说说memcache存储。

     一般地, session 是以文本文件形式存储在服务器端的。如果使用 seesion,或者该 PHP 文件要调用 session 变量,那么就必须在调用 session 之前启动它,使用 session_start() 函数。其它都不需要你设置了,PHP 自动完成 session 文件的创建。其默认 session 的存放路径是服务器的系统临时文件夹,可以使用ini_set('session.save_path','路径');来设置session的存放路径。
        但是如果碰到大数据量的sesstion的时候,使用基于文件的session存取瓶颈可能都是在磁盘IO操作上,现在利用memcached来保存session数据,直接通过内存的方式,效率自然能够提高不少。在读写速度上会比 files 时快很多,而且在多个服务器需要共用 session 时会比较方便,将这些服务器都配置成使用同一组 memcached 服务器就可以,减少了额外的工作量。
       其缺点是 session 数据都保存在 memory 中,一旦当机,数据将会丢失。但对 session 数据来说并不是严重的问题,其本身就是临时性数据
以下是基本的配置步骤:
1.安装和配置memcache,方法参考百度上的文章,一堆一堆的。

2.修改session配置,有几种方法

(1)如果你能修改到服务器配置文件,那就打开打开php.ini

    修改下面两项:

     session.save_handler = memcache
     session.save_path = "tcp://127.0.0.1:11211"

(2)修改网站根目录下的.htaccess文件

    php_value session.save_handler "memcache"
    php_value session.save_path  "tcp://127.0.0.1:11211"

(3)最常用的方法  在程序代码中修改

   ini_set("session.save_handler", "memcache");
   ini_set("session.save_path", "tcp://127.0.0.1:11211");

注:使用多个 memcached server 时用逗号","隔开,并且和 Memcache::addServer() 文档中说明的一样,可以带额外的参数"persistent"、"weight"、"timeout"、"retry_interval" 等等,类似这样的:"tcp://host:port?persistent=1&weight=2,tcp://host2:port2"

3.测试

 (1)建立一个php页面a.php 然后创建一个session

    <?php

      ini_set("session.save_handler", "memcache");
      ini_set("session.save_path", "tcp://127.0.0.1:11211");

      session_start();

      $_SESSION['test'] = 'Thisvalue';

      $sid = session_id();

      echo '<a href="b.php?sid='.$sid.'">next page</a>';

    ?>

 (2)建立一个php页面b.php,然后在memcache里查询session并输出

    <?php

     $mem = new Memcache;

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

     if($_REQUEST['sid']){

      $sess_value = $mem->get($_REQUEST['sid']); 

      echo $sess_value;

     }else{

      echo '缺少参数!';

     }

    ?>

访问a.php页面,点击链接后如果输出test|s:9:"Thisvalue";

表示session已经成功写入memcache!!!


(责任编辑:IT)
------分隔线----------------------------