使用Heroku + PHP,将Redis(通过Redis To Go)用作会话存储

在Heroku环境中,使用Redis(Redis To Go)作为PHP的会话存储的步骤。

添加 Redis To Go 插件

作为Redis服务器,将使用Redis To Go插件(提供免费的Nano计划:最大连接数=10 / 数据库数量=1 / 实例大小=5MB)。

https://addons.heroku.com/redistogo的翻译如下:

只需要一个选项:

$ heroku addons:add redistogo

在 composer.json 文件中添加 redis 扩展。

在Heroku上的PHP中,为了使用redis扩展,需要将redis添加到composer.json中。

{
  "require": {
    "ext-redis": "*"
  }
}

从环境变量中获取连接信息。

当您添加 Redis To Gos 添加程序后,连接到 Redis To Go 的信息将设置在环境变量 REDISTOGO_URL 中。

REDISTOGO_URL的内容按如下URL格式呈现。

REDISTOGO_URL=redis://redistogo:xxxxxxxxxxxxxxxxxxxxxxxx@xxxxx.redistogo.com:PORT/

将这个使用PHP的parse_url()函数进行解析。

<?php
$url = parse_url(getenv('REDISTOGO_URL'));

执行脚本后,$url的每个元素将如下所示。

    • $url[‘host’] = 接続ホスト名

 

    • $url[‘port’] = 接続ポート

 

    $url[‘pass’] = 接続パスワード

将此内容用作连接信息。

设置为会话处理程序。

使用ini_set函数来设置Redis扩展的会话处理程序。在session.save_path中,根据从环境变量获取的值,填写连接信息。

在中文中,将密码指定为类似于auth=PASS的查询字符串是重点。

<?php
const SESSION_KEY = 'count';

$url = parse_url(getenv('REDISTOGO_URL'));

$redisServer = sprintf('tcp://%s:%d?auth=%s', $url['host'], $url['port'], $url['pass']);

ini_set('session.save_handler', 'redis');
ini_set('session.save_path', $redisServer);

// session
session_start();

if (empty($_SESSION[SESSION_KEY])) {
    $_SESSION[SESSION_KEY] = 0;
}

$_SESSION[SESSION_KEY]++;

var_dump($_SESSION);

使用Laravel进行连接。

首先,我们将Redis服务器的连接信息设置在app/config/database.php文件中。

<?php

$redisUrl = parse_url(getenv('REDISTOGO_URL'));

return [
    'redis' => [
        'cluster' => false,
        'default' => [
            'host' => $redisUrl['host'],
            'port' => $redisUrl['port'],
            'database' => 0,
            'password' => $redisUrl['pass'],
        ],
    ],
];

下一步,在app/config/session.php中将驱动程序设置为redis。

<?php

return [
    'driver' => 'redis',
];

此外,如果在app/config/cache.php文件中将驱动程序设置为redis,缓存也会被保存在Redis服务器上。

<?php

return [
    'driver' => 'redis',
];
bannerAds