【问题标题】:Reset Cache TTL in each Access在每个访问中重置缓存 TTL
【发布时间】:2020-01-09 20:55:19
【问题描述】:

我想知道是否有任何方法可以从上次访问时更新缓存 TTL?

目前,我有一种方法可以通过 API 调用登录到 adobe 连接,并且 API 会话在上次调用后的 4 天内有效。 但是我的缓存驱动程序从添加的那一刻起仅将会话保留在缓存中 4 天。但我想自上次访问以来将其保留 4 天!

有没有办法更新缓存 TTL? 我确定忘记并重新插入密钥不是最佳做法。


    /**
     * Login Client Based on information that introduced in environment/config file
     *
     * @param Client $client
     *
     * @return void
     */
    private function loginClient(Client $client)
    {
        $config = $this->app["config"]->get("adobeConnect");

        $session = Cache::store($config["session-cache"]["driver"])->remember(
            $config['session-cache']['key'],
            $config['session-cache']['expire'],
            function () use ($config, $client) {
                $client->login($config["user-name"], $config["password"]);
                return $client->getSession();
            });

        $client->setSession($session);
    }

【问题讨论】:

  • 您不能只更新 TTL。您需要使用新的 TTL 更新整个缓存项。

标签: laravel laravel-5 caching laravel-5.8 laravel-cache


【解决方案1】:

您可以侦听事件CacheHit,测试密钥模式,并使用新的 TTL 重置该密钥的缓存。

为此,您应该创建一个新的侦听器并将其添加到EventServiceProvider:

protected $listen = [
    'Illuminate\Cache\Events\CacheHit' => [
        'App\Listeners\UpdateAdobeCache',
    ]
];

还有听者:

class UpdateAdobeCache {

    public function handle(CacheHit $event)
    {
        if ($event->key === 'the_cache_key') { // you could also test for a match with regexp
            Cache::store($config["session-cache"]["driver"])->put($event->key, $event->value, $newTTL);
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-06
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2018-12-05
    • 2022-01-24
    • 2020-06-17
    相关资源
    最近更新 更多