Не пойму как записывается Cache в Laravel

141
19 декабря 2019, 13:00

Допустим у меня cache записывается в файл:

if (Auth::check()) {
    Cache::store('file')->put('userIsOnline-' . Auth::user()->id, 'true', now()->addMinutes(1));
}

В самом файле кеша я вижу такую запись:

1553595759s:4:"true";

Так вот, суть моего не понимания:

1) 1553595759s - Время истечения кеша, но после того как истекает время его существования, я обращаюсь по ключу к нему, то мне всё равно выдаётся это значение. Т.е. Мне нужно самому сравнивать время и из этого делать вывод истёк кеш или нет?

2) 4 - что это такое? Во всех файлах кеша это число есть....

3) "true" - где хранится ключ (userIsOnline-{id})? Почему в кеше только значение?

p.s. Laravel 5.7

Answer 1

Весь функционал файлового хранилища кеша Laravel находится здесь: https://github.com/laravel/framework/blob/5.7/src/Illuminate/Cache/FileStore.php

Если вы сохраняете в кеше какое-то значение со сроком хранения 1 минута, то после истечения 1 минуты попытка получить это значение из кеша

Cache::store('file')->get('userIsOnline-' . Auth::user()->id);

Должна закончиться получением null. Самому никаких дополнительных действий производить не нужно. Если вы все же получаете какое-то значение, то, скорее всего, у вас все-таки где-то перед вызовом get(...) вызывается put(...) с интервалом меньше, чем 1 минута.

Ключ в файловом кеше нигде не хранится, при сохранении в кеш ключ сразу хешируется sha1и разбивается на несколько частей, из которых складывается путь к файлу, в который будут записаны данные. Подробнее смотрите метод path().

В сам файл данные записываются в таком виде:

1553595759s:4:"true";

Где 1553595759(10 цифр) - Timestamp окончания времени хранения, а s:4:"true"; - сериализованные данные, хранящиеся в кеше (в вашем случае - результат serialize('true');).

Answer 2

Это результат работы функции serialize() 4 - это количество символов в строке "true"

READ ALSO
Передача данных из одной формы в другю

Передача данных из одной формы в другю

Задача такая: посетитель заполняет форму (имя и телефон) и данные отправляются методом post после чего его перенаправляет на другую страницу,...

121
Сокет-сервер пропускает сообщения

Сокет-сервер пропускает сообщения

имеется серверВозникает проблема, иногда клиент отправляет несколько сообщений подряд и сервер не успевает их поймать, как можно исправить?...

117
Количество ФИЗИЧЕСКИХ процессоров на Linux c/c++

Количество ФИЗИЧЕСКИХ процессоров на Linux c/c++

Не понимаю , как написать код на c/c++ для определения количества ФИЗИЧЕСКИХ процессоров (не ядер)Может можно как-то интерпретировать команды...

130