• Using Redis to store php session


    Using Redis to store php session


    默认情况下,php将会将session信息存储在文件系统上,在单机情况下没有问题,但是当系统负载增大,或者在对系统可用性要求很高的场景下,当台机器不仅处理能力跟不上,而且当机器故障时整个系统就处于不可用状态了。所以多机器负载均衡就非常有必要了。
    但是问题来了,假设现在系统有两台应用服务器serverA,serverB,用户X现在已经登录了,而登录状态众所周知是存储在应用服务器的session中的,如果用户X的登录请求是serverA响应的,那么其登录状态是存储在serverA上的,当用户X的下一个请求被转发给serverB时,serverB是会认为用户X尚未登录,因为他没有存储用户X的session信息。
    当然你可以将负载均衡设置为,将相同IP的访问请求均转发给同一个服务器,但是这种方案并不完美,可以设想这样一种情形,应用服务器serverA进程死掉了,那么在serverA上登录的所有用户就无法正常访问服务了。
    所以只有能够在多台应用服务器之间共享存储session才能够解决这一问题,而现有的常见的解决方案就使用memcache,redis来存储session。

    windows下配置php+redis

    1. 安装redis服务器

    下载地址  Redis.msi
    如果下载的非安装版,则需要通过命令行来启动,redis服务,而且命令行窗口不可以关闭,否则服务会关闭

    redis-server.exe redis.conf

    如果选择的是msi安装版,安装后会在windows服务中看到redis服务,默认是自动启动的,命令行去到安装目录,运行redis-cli.exe可以通过命令行来操作redis的读写。 

    keys *  //列出所有的键。
    get "phpredis_session:xxxxxxxxxxxxx" //获取指定键的值
    flushdb //清除所有的键值对。

    redis.conf文件中可以配置redis-server的相关参数。

    2. 安装php_redis扩展

    2.1. 通过phpinfo()查看php编译脚本。

    Alt

    2.2. 下载与编译脚本一致的php_redis扩展

    一定要一致,否则无法使用
    下载地址php_redis extension
    Alt
    ts(thread safe), nts(thread not safe).

    2.3. 将下载的php_redis.dll放在php扩展目录中(ext).

    3. 配置php.ini添加扩展

    extension=php_redis.dll
    

    4. 重启apache服务,查看phpinfo()出现redis块表示成功。

    Alt

    5 设置php.ini的session存储模式

    session.save_handler = redis
     
    session.save_path=“tcp://127.0.0.1:6379”;
    

    如果有多台redis服务器可以设置为:
    session.save_path=“tcp://10.10.0.1:6379?weight=4,tcp://10.10.0.2:6379?weight=6”

    6 测试

    测试php代码

    $redis = new Redis();  
    $redis->connect(“127.0.0.1","6379");  //php客户端设置的ip及端口  
    //存储一个 值  
    $redis->set("say","Hello World");  
    echo $redis->get("say");     //应输出Hello World  
      
    //存储多个值  
    $array = array('first_key'=>'first_val',  
              'second_key'=>'second_val',  
              'third_key'=>'third_val');  
    $array_get = array('first_key','second_key','third_key');  
    $redis->mset($array);  
    var_dump($redis->mget($array_get));  
    

     命令行查看结果

    redis-cli.exe
     
    keys * 

    CentOS下配置php+redis

    1. 安装redis服务器

    下载redis-server代码并安装

    mkdir /tmp/redis
    cd /tmp/redis
    wget http://download.redis.io/releases/redis-2.8.8.tar.gz
    tar xzf redis-*
    cd redis-*
     
    make
    sudo make install clean
     
    ##copy configure file
    mkdir /etc/redis
    cp redis.conf /etc/redis/redis.conf
    

     配置文件示例

    #start as a daemon in background
    daemonize yes
    #set port, by default is 6379
    port 6379
    #set ip on which daemon will be listening for connections
    bind 127.0.0.1
    #where to dump database
    dir /var/opt
    

    检查服务安装位置:

    whereis redis-server
    #redis-server: /usr/local/bin/redis-serve
    

     设置redis-server跟随系统启动

    vi /etc/rc.local
    #在exit 0之前插入如下命令
    /usr/local/bin/redis-server /etc/redis/redis.conf
    #开启服务
    redis-server /etc/redis/redis.conf
    #连接服务
    redis-cli
    

    2. 安装php_redis扩展

    下载php-redis扩展并安装

    cd /tmp
    wget https://github.com/nicolasff/phpredis/zipball/master -O phpredis.zip
    unzip phpredis.zip
    cd phpredis-*
    phpize
    ./configure
    make && make install
    

    3. 配置php.ini

    插入redis配置

    session.save_handler = redis
    session.save_path = "tcp://10.44.64.8:6379"
    extension=redis.so
    

     设置完成。

  • 相关阅读:
    由基于qml,c++的串口调试工具浅谈qml与c++混合编程
    qt5_qml_Opengl_shader 第一弹----------------------openglunderqml的简化及介绍
    Delphi 的接口机制——接口操作的编译器实现过程(2)
    Delphi 的接口机制——接口操作的编译器实现过程(1)
    ddd
    [leetcode]Gray Code
    synapse socket总结一:服务器模型
    CentOS 6.5(64bit)安装GCC4.8.2+Qt5.2.1(替换GCC的链接库)
    Qt打开外部程序和文件夹需要注意的细节(Qt调用VC写的动态库,VC需要用C的方式输出函数,否则MinGW32编译过程会报错)
    Qt+SQLite数据加密的一种思路(内存数据库)
  • 原文地址:https://www.cnblogs.com/philzhou/p/using-redis-to-store-php-session.html
Copyright © 2020-2023  润新知