F3 框架:如何确保缓存正常工作?

Posted

技术标签:

【中文标题】F3 框架:如何确保缓存正常工作?【英文标题】:F3 Framework: how to make sure that caching is working correctly? 【发布时间】:2021-11-17 11:57:28 【问题描述】:

我从 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 还是我没有正确缓存。

【问题讨论】:

【参考方案1】:

事实证明,除非指定 ttl(生存时间),否则缓存将无法工作。以下是如何将上述值缓存 24 小时。

$f3->set('dbusername', $username, 86400);
$f3->set('dbpassword', $password, 86400);
$f3->set('dbhost', $host, 86400);
$f3->set('dbport', $port, 86400);

【讨论】:

以上是关于F3 框架:如何确保缓存正常工作?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 和输出缓存 - 如何查看它是不是正常工作?

谷歌云存储:我如何避免边缘缓存

国内最流行的缓存框架,它排第一!

国内最流行的缓存框架,它排第一!

新的浏览器缓存策略变更:舍弃性能确保安全

如何确保我的 CDN 按来源缓存 CORS 请求?