web, 存储服务, 软件介绍

php安装memcached并支持session

php安装memcached并使用memcached,首先需要服务器有memcache服务运行,如果需要本地安装memcache服务,请参考这篇文章:
memcache安装教程

在安装php的memcached扩展前,我们需要先安装一个lib库,不然后面会报错:
php configure: error: memcached support requires libmemcached.

前往libmemcache下载:
https://launchpad.net/libmemcached/+download
安装如下:

root [~]# wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
root [~]# tar -zxvf libmemcached-1.0.18.tar.gz                                                  
root [~]# cd libmemcached-1.0.18
root [~]# ./configure  --with-memcached
root [~]# make
root [~]# make install

安装完成后,我们开始安装php memcached。
前往php扩展网站下载memcached:
http://pecl.php.net/package/memcached
安装如下:

root [~]# wget http://pecl.php.net/get/memcached-2.2.0.tgz
root [~]# tar -zxvf memcached-2.2.0.tgz
root [~]# cd memcached-2.2.0
#你的php路径
root [~]# /php/bin/phpize
root [~]# ./configure --with-php-config=/opt/app/php/bin/php-config
root [~]# make
root [~]# make install

安装完成后,会告知我们动态链接库在哪里:
Installing shared extensions: /***/php/lib/php/extensions/no-debug-non-zts-20131226/

建议复制到extensions目录下,并重新配置php:

root [~]# cd /***/php/lib/php/extensions/
root [~]# cp no-debug-non-zts-20131226/memcached.so ./
root [~]# cd /***/php/
root [~]# vi php.ini
#加入一行声明
extension=memcached.so

重启php-fpm:

root [~]# kill -USR2 `cat /***/php/var/run/php-fpm.pid`

此时,可以看到php安装memcached完成:

root [~]# php -r "phpinfo();" | grep memcached
memcached
memcached support => enabled
libmemcached version => 1.0.18
memcached.compression_factor => 1.3 => 1.3
memcached.compression_threshold => 2000 => 2000
memcached.compression_type => fastlz => fastlz
memcached.serializer => php => php
memcached.sess_binary => 0 => 0
memcached.sess_connect_timeout => 1000 => 1000
memcached.sess_consistent_hash => 0 => 0
memcached.sess_lock_expire => 0 => 0
memcached.sess_lock_max_wait => 0 => 0
memcached.sess_lock_wait => 150000 => 150000
memcached.sess_locking => 1 => 1
memcached.sess_number_of_replicas => 0 => 0
memcached.sess_prefix => memc.sess.key. => memc.sess.key.
memcached.sess_randomize_replica_read => 0 => 0
memcached.sess_remove_failed => 0 => 0
memcached.sess_sasl_password => no value => no value
memcached.sess_sasl_username => no value => no value
memcached.store_retry_count => 2 => 2
memcached.use_sasl => 0 => 0
Registered save handlers => files user memcached

php安装memcache和memcached类似,需要去memcache下载源码编译即可:
http://pecl.php.net/package/memcache

php session默认使用file,存储在/tmp下面,为了减少磁盘IO和分布式缓存,我们可以将php的session设置为memcache或memcached,二者在配置php.ini时有些差异。
设置memcache:
session.save_handler = memcache
session.save_path = "tcp://localhost:11211"
设置memcached:
session.save_handler = memcached
session.save_path = "localhost:11211"

设置memcached时,无法直接通过php读取到memcached内容,而通过设置memcache可以直接读取内容。
测试代码如下:

<?php
session_start();
if (!isset($_SESSION['TEST'])) {
    $_SESSION['TEST'] = time();
}

$_SESSION['TEST2'] = time();
print $_SESSION['TEST'];
print "<br><br>";
print $_SESSION['TEST2'];
print "<br><br>";
print session_id();
print "<br><br>";

$memcache = new Memcached;
$memcache->addServer('localhost', 11211);
var_dump($memcache->get(session_id()));
print "<br><br>";
$memcache->set('aaaa', 'hello ranshy');
print $memcache->get('aaaa');

显示结果:
1484898619

1484898899

1jldgkbr59hi41be52mdpumig1

string(37) "TEST|i:1484898619;TEST2|i:1484898898;"

hello ranshy

Leave a Reply

黑ICP备15001596号