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);