F3 框架:如何确保缓存正常工作?
F3 Framework: how to make sure that caching is working correctly?
我正在从 AWS secrets manager 获取数据库凭证并将其存储在缓存中,这样就不必在每次请求时都从 AWS 获取。
问题是,如果我更改密名进行测试,F3 将无法连接到数据库。这意味着即使我告诉 F3 仅当它无法找到缓存的任何内容时才检查秘密名称,它仍在检测到更改的秘密名称。
use Aws\SecretsManager\SecretsManagerClient;
$f3->set('CACHE', true);
if ($f3->exists('dbusername')) {
$username = $f3->get('dbusername');
$password = $f3->get('dbpassword');
$host = $f3->get('dbhost');
$port = $f3->get('dbport');
} else {
$secretName = getenv('AWS_SECRET_NAME');
$client = new SecretsManagerClient([
'version' => 'latest'
]);
$secretManager = $client->getSecretValue([
'SecretId' => $secretName,
]);
$db = json_decode($secretManager['SecretString']);
$username = $db->username;
$password = $db->password;
$port = $db->port;
$host = $db->host;
}
$f3->set('dbusername', $username);
$f3->set('dbpassword', $password);
$f3->set('dbhost', $host);
$f3->set('dbport', $port);
我正在我的 PC 上进行测试,我不知道该代码是否可以在服务器上运行,不确定是我的 PC 问题还是我没有正确缓存。
事实证明,除非指定 ttl(生存时间),否则缓存将无法工作。以下是将上述值缓存 24 小时的方法。
$f3->set('dbusername', $username, 86400);
$f3->set('dbpassword', $password, 86400);
$f3->set('dbhost', $host, 86400);
$f3->set('dbport', $port, 86400);
我正在从 AWS secrets manager 获取数据库凭证并将其存储在缓存中,这样就不必在每次请求时都从 AWS 获取。
问题是,如果我更改密名进行测试,F3 将无法连接到数据库。这意味着即使我告诉 F3 仅当它无法找到缓存的任何内容时才检查秘密名称,它仍在检测到更改的秘密名称。
use Aws\SecretsManager\SecretsManagerClient;
$f3->set('CACHE', true);
if ($f3->exists('dbusername')) {
$username = $f3->get('dbusername');
$password = $f3->get('dbpassword');
$host = $f3->get('dbhost');
$port = $f3->get('dbport');
} else {
$secretName = getenv('AWS_SECRET_NAME');
$client = new SecretsManagerClient([
'version' => 'latest'
]);
$secretManager = $client->getSecretValue([
'SecretId' => $secretName,
]);
$db = json_decode($secretManager['SecretString']);
$username = $db->username;
$password = $db->password;
$port = $db->port;
$host = $db->host;
}
$f3->set('dbusername', $username);
$f3->set('dbpassword', $password);
$f3->set('dbhost', $host);
$f3->set('dbport', $port);
我正在我的 PC 上进行测试,我不知道该代码是否可以在服务器上运行,不确定是我的 PC 问题还是我没有正确缓存。
事实证明,除非指定 ttl(生存时间),否则缓存将无法工作。以下是将上述值缓存 24 小时的方法。
$f3->set('dbusername', $username, 86400);
$f3->set('dbpassword', $password, 86400);
$f3->set('dbhost', $host, 86400);
$f3->set('dbport', $port, 86400);