PHP扩展有很多,参考:http://redis.io/clients#php
官方打星的就是phpredis Predis,phpredis是C写的,效率会高写,Predis是PHP写的,能直接看到源码。
下载phpredis,一方面是觉得性能好,另一方面主要是用它来存session,地址:https://github.com/phpredis/phpredis/tree/2.2.7
不知道为啥phpredis有那么多分枝,还是直接下2.2.7。
安装phpredis之前,需要先安装igbinary的一个扩展,因为会用到。参考:https://pecl.php.net/package/igbinary
pecl install igbinary
安装好之后,加入扩展信息到php.ini
extension=igbinary.so
安装方法也很简单,参考:https://github.com/phpredis/phpredis/tree/master#installation
phpize
./configure [--enable-redis-igbinary]
make && make install
会在/usr/lib64/php/modules/看到redis.so,加入扩展到php.ini中,一定要加到igbinary.so之后。
==================================================================================
windows下安装igbinary
参考:https://pecl.php.net/package/igbinary/1.2.1/windows
下载对应版本的dll,同样加入到php.ini扩展。
参考:http://windows.php.net/downloads/pecl/snaps/redis/2.2.5/
下载对应版本的dll,同样加入到php.ini扩展。
根据phpredis说明,连接redis有connect和pconnect两种,根据参考资料来看,pconnect的close()只是不允许php继续访问redis,并不是直接关闭连接,整个php-fpm生命周期都有效。
参考:http://m.blog.youkuaiyun.com/blog/qmhball/46988111
设置php.ini中
session.save_handler = redis
session.save_path="127.0.0.1:6379"
测试redis存储session
<?php
//如果未修改php.ini下面两行注释去掉
//ini_set('session.save_handler', 'redis');
//ini_set('session.save_path', 'tcp://127.0.0.1:6379');
session_start();
$_SESSION['sessionid'] = 'this is session content!';
echo $_SESSION['sessionid'];
echo '<br/>';
$redis = new redis();
$redis->connect('ipaddress', 6379);
//redis用session_id作为key并且是以string的形式存储
echo $redis->get('PHPREDIS_SESSION:' . session_id());
?>
输出:
this is session content!
sessionid|s:24:"this is session content!";
从输出内容可以看到,无论从$_SESSION['key'],还是$redis->get('PHPREDIS_SESSION:'.session_id())都可以输出内容,证明session确实已经存储到redis中。
如果设置php.ini以后通过phpinfo()查看session.save_handler和session.save_path并没有变化,还是原来的file,那就是因为有其他conf覆盖了这些配置。很可能是/etc/php-fpm.conf或者/etc/php-fpm.d/*.conf,找到并修改,重启php-fpm即可。