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
extension=igbinary.so
phpize
./configure [--enable-redis-igbinary]
make && make install
==================================================================================
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.csdn.net/blog/qmhball/46988111
设置php.ini中
session.save_handler = redis
session.save_path="127.0.0.1:6379"
测试redis存储session
';
$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即可。