Сбрасывать TTL кеша при каждом доступе
Мне было интересно, есть ли способ обновить TTL кеша с момента последнего доступа?
в настоящее время у меня есть способ войти в Adobe Connect с вызовом API, и сеанс 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);
}
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);
}
}
}