使用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',
];