网站首页学无止境PHP

php session 存放在redis

发布时间:2016-02-29 11:37:32编辑:songlin阅读(112)

    最近公司服务器压力山大,经组织一研究,要搞双机。可是双机面临这两个问题。1.文件共享问题;2.session共享问题;借鉴oschina.net的一篇博文 在加上自己的操作过程,希望能帮助一些人。

    1.首先要做的就是安装redis

    1. #Installation 
    2. $ mkdir -p /root/redis 
    3. $ cd /root/redis 
    4. #Download, extract and compile Redis with: 
    5. $ wget http://download.redis.io/releases/redis-2.8.19.tar.gz 
    6. $ tar xzf redis-2.8.19.tar.gz 
    7. $ cd redis-2.8.19 
    8. $ make 
    9. #The binaries that are now compiled are available in the src directory. Run Redis with: 
    10. # 后台启动redis  
    11. $ src/redis-server /root/redis/redis-2.8.19/redis.conf & 
    12. #You can interact with Redis using the built-in client: 
    13. $ src/redis-cli 
    14. redis> set polin wangsonglin.cn 
    15. OK 
    16. redis> get polin 
    17. "wangsonglin.cn" 

    2.然后是安装phpredis扩展 redis.so

    安装方法参考:http://www.lecloud.net/post/3378834922/install-redis-php-extension-phpredis-with

    1. # 
    2. #以下代码为参考网站安装方法,请根据自己的实际安装位置自由调整, 
    3. # 
    4. cd /usr/local 
    5. mkdir src 
    6. cd /usr/local/src 
    7. mkdir phpredis-build 
    8. cd phpredis-build 
    9. git clone --depth 1 git://github.com/owlient/phpredis.git 
    10. # 此处可能会报错 bash: git: command not found...  
    11. yum install -y git  #解决上方 git : command not found 可省略 
    12. cd phpredis 
    13. sudo phpize 
    14. sudo ./configure 
    15. sudo make 
    16. sudo make install 
    17.   
    18. cd /usr/local/lib/php5/ 
    19. gedit php.ini 
    20. #如果没有配置 extension_dir 的话请配置到你的extension的路径 
    21. cp redis.so /usr/local/lib/php5/extension/ 
    22. # 在php.ini中添加一行 
    23. extension = redis.so  
    24. # 重启nginx 和 php-fpm 就输出phpinfo 就能看到redis 扩展安装完成 

    设置php.ini

    找到; session.save_handler = files这一行 ,修改为 session.save_handler = redis,把原来的session存储方式改微redis方式这样会提高速度,原因是redis是在内存读取必然比在文件读取要快一些

    找到; session.save_path = "/tmp"这一行 ,修改为 session.save_path = "tcp://127.0.0.1:6379",这是指向了本地的tcp服务,这个服务一会是由我们的redis启动

    重启nginx 和 php-fpm 就输出phpinfo 就能看到session 保存方式和路径发生了改变

    3.编写php代码

    1. <?php 
    2.         session_start(); 
    3.         var_dump(session_id()); 

    页面输出结果:

    1. string(26) "emq5ksb4sagnc63qfuk6bpjom2" 

    使用redis客户端查看在redis库

    1. [root@localhost ~]# /root/redis/redis-2.8.19/src/redis-cli  
    2. 127.0.0.1:6379> keys * 
    3. 1) "songlin" 
    4. 127.0.0.1:6379> keys * 
    5. 1) "PHPREDIS_SESSION:emq5ksb4sagnc63qfuk6bpjom2" 
    6. 2) "songlin" 
    7. 127.0.0.1:6379> 

    下面是原博文的php代码,相对来说更详细一点。

    1. <?php  
    2.     header("Content-type:text/html;charset=utf-8"); 
    3.     session_start();//这个很重要 
    4.       
    5.     $_SESSION['test_session']= @array('name' =>'fanqie' , 'ccc'=>'hello redis '); 
    6.       
    7.     $redis = new redis(); 
    8.     $redis->connect('127.0.0.1', 8888); 
    9.     echo 'sessionid>>>>>>> PHPREDIS_SESSION:' . session_id(); 
    10.     echo '<br/>'
    11.     echo '<br/>'
    12.     //redis用session_id作为key并且是以string的形式存储 
    13.     echo '通过php用redis获取>>>>>>>'.$redis->get('PHPREDIS_SESSION:' . session_id()); 
    14.     echo '<br/>'
    15.     echo '<br/>'
    16.     echo '通过php用session获取>>>>>>><br/>'
    17.     echo '<pre>'
    18.     var_dump($_SESSION['test_session']); 
    19.     echo '</pre>'

    页面输出,我们可以看出我们已经成功存储并且通过redis成功获取到了存储的值

    1. sessionid>>>>>>> PHPREDIS_SESSION:fmd75d3dfrlkp43eh567f7dsi5 
    2.   
    3. 通过php用redis获取>>>>>>>test_session|a:2:{s:4:"name";s:6:"fanqie";s:3:"ccc";s:12:"hello redis ";} 
    4.   
    5. 通过php用session获取>>>>>>> 
    6. array(2) { 
    7.   ["name"]=> 
    8.   string(6) "fanqie" 
    9.   ["ccc"]=> 
    10.   string(12) "hello redis " 

    使用redis客户端查看在redis库中已经存储可以查询到hello redis 这条记录了

    1. dangcheng@dangcheng-pc:~$ redis-cli -p 8888 
    2. 127.0.0.1:8888> select 0 
    3. OK 
    4. 127.0.0.1:8888> keys * 
    5. 1) "PHPREDIS_SESSION:fmd75d3dfrlkp43eh567f7dsi5" 
    6. 127.0.0.1:8888> get PHPREDIS_SESSION:fmd75d3dfrlkp43eh567f7dsi5 
    7. "test_session|a:2:{s:4:\"name\";s:6:\"fanqie\";s:3:\"ccc\";s:12:\"hello redis \";}" 
    8. 127.0.0.1:8888> 

     

本文来源地址:http://my.oschina.net/youa/blog/373500