Laravel Middleware Cache не работает должным образом

Я пытаюсь создать промежуточное программное обеспечение, которое будет проверять состояние указанного сервера и помещать этот статус в кеш, но кеш не работает в промежуточном программном обеспечении должным образом, данное значение кеша всегда равно нулю, когда я пытаюсь проверить наличие ключа и т. д.

public function handle($request, Closure $next)
{
    $response = $next($request);

    if(!Cache::has(Config::get('ots.server_status_cache_name'))) {
        if($this->checkServerStatus()) {
            Cache::put(Config::get('ots.server_status_cache_name'), 1, Config::get('ots.server_status_cache_time'));
        } else {
            Cache::put(Config::get('ots.server_status_cache_name'), 0, Config::get('ots.server_status_cache_time'));
        }
    }

    return $response;
}

Просто для вашего сведения, $this->checkServerStatus() возвращает true/false.

Итак, когда я пытаюсь проверить наличие ключа Cache, он всегда имеет значение false для Cache::has("KEY") или null для Cache::get("KEY").

Что случилось? Я не могу использовать кеш в промежуточном программном обеспечении?


person Narkon    schedule 21.06.2016    source источник


Ответы (1)


Поведение метода Cache::has во многом зависит от фактического используемого вами бэкэнда.

Попробуйте сделать это:

public function handle($request, Closure $next)
{
    $response = $next($request);

    if(Cache::has(Config::get('ots.server_status_cache_name'))) {
        return $response; // Exit method as soon as you can
    }

    $serverStatus = $this->checkServerStatus() ? 'up' : 'down';
    Cache::put(Config::get('ots.server_status_cache_name'), $serverStatus, Config::get('ots.server_status_cache_time'));

    return $response;
}

Таким образом, вы храните в кеше не логическое значение, а строку. Возможно, это не решение, но укажет вам правильное направление.

В зависимости от используемого механизма кэширования вы можете запустить его в режиме отладки, чтобы увидеть выполняемые соединения и транзакции. Например, вы можете запустить memcached с параметром -vv, чтобы увидеть получение и наборы, или вы можете подключиться к экземпляру Redis и выполнить MONITOR, чтобы увидеть, что делает ваше приложение. Это может помочь вам обнаружить проблему.

person Nico Andrade    schedule 21.06.2016
comment
Спасибо за ответ, но проблема была решена заменой драйвера кеша с массива на Redis. Я просто не помнил, что выбрал первый для каких-то отладочных целей :) - person Narkon; 21.06.2016