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.csdn.net/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即可。


Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐