redis集群实现session共享

redis集群实现session共享

在两台服务器上通过redis实现session共享:

描述

A服务器:192.168.4.254
B服务器:192.168.4.125

  • 此代码的实现依赖于https://github.com/nrk/predis 标准库
  • 下载上面的标准库,放到你的根目录下,如predis文件夹。
  • 代码中包含predis标准库加载文件require( “predis/autoload.php” );
  • 以下是实例代码内容:
require( "predis/autoload.php" );
$single_server = array(
    'tcp://192.168.4.254:6379' ,
    'tcp://192.168.4.254:6380' ,
    'tcp://192.168.4.254:6381' ,
    'tcp://192.168.4.125:6382' ,
    'tcp://192.168.4.125:6383' ,
    'tcp://192.168.4.125:6384' ,
);

$options = array( 'cluster' => 'redis' ,'prefix' => 'sessions:' );

$client = new Predis\Client( $single_server, $options );
$handler = new Predis\Session\Handler( $client, array( 'gc_maxlifetime' => 50 ));
$handler ->register() ;
session_id( 'example_session_id' );
session_start() ;
if ( isset($_SESSION ['foo'])) {
    echo "Session has `foo` set to {$_SESSION[ 'foo']}" , PHP_EOL;
 } else {
    $_SESSION ['foo'] = $value = mt_rand();
    echo "Empty session, `foo` has been set with $value ", PHP_EOL;
}

A服务器效果:

redis集群实现session共享_第1张图片

B服务器:
redis集群实现session共享_第2张图片

因为我是先执行B服务器,后执行A服务器。结果发现他们的session结果是一致的

原理

  • 使用到redis集群
  • php的session_set_save_handler
  • 不要相信网上的所谓的php.ini的session redis配置。集群中根本不实用。我的php.ini中session.save_handler依然是files
  • redis集群实现session共享_第3张图片

你可能感兴趣的:(redis)