PHP使用memcached来存储session

  php默认使用文件来存储用户会话(session),这意味着会话数据的存取都要进行硬盘的读写。内存的带宽大概为10GB/s,硬盘的读取速率为60MB/s左右,两者在性能上有着巨大的差距。如果将会话数据保存到内存中,对于负载高的站点,能带来性能提升。

  memcached是一个基于内存的key-value存储引擎,能够存储任意类型的数据。php内核支持使用memcached来存储会话,可以通过配置来提升站点的性能。

  1. 安装memcached: yum install memcached。由于CentOS的基础源中没有memcached,运行这个命令之前应该先添加epel源或者remi源;
  2. 配置: vim /etc/sysconfig/memcached,将options项更改为: options = “-l 127.0.0.1″,即只监听本地的连接,或者在iptables中限制外部访问;
  3. 启动和配置重启: chkconfig memcached on; service memcached start;
  4. 安装php的memcached拓展: yum install php-pecl-memcached;
  5. 配置php:如果使用php-fpm,则编辑 php-fpm.d/www.conf文件,否则编辑 php.ini即可,找到 session.save_handler,更改为: session.save_handler = memcached;找到 session.save_path,更改为: session.save_path = "localhost:11211"
  6. 重启php-fpm: service php-fpm restart

      通过 php -i | grep session 命令可以看到session.save_path已经指向了memcached,即成功的使用了memcached来保存会话。另外也可以通过登陆memcached服务端查看:

telnet 127.0.0.1 11211  
stats items  

  输入这两条命令,可以看到memcached中有一系列的数据,即php存放到memcached中的数据。

  此处的memcached非旧式的memcache(先前版本的memcache的服务器端程序也叫做memcached)。如果是旧式的memcache,配置项应改为:

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