Понимание кэширования Laravel: фасад кэша и Redis


Понимание кэширования Laravel: фасад кэша и Redis

16.11.2019 03:35:06 Просмотров 303 Источник

Я новичок в Laravel. Я провел исследование по этой теме, но я не могу найти ответ, который проясняет ситуацию для меня.

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

php artisan config:cache
php artisan route:cache

1) Даже если Laravel имеет некоторые встроенные команды и функции, которые автоматически обрабатывают некоторый кэш (не понимал точно, какие части), мне все равно приходится вручную использовать фасад кэша для результатов запроса, верно?

Он не делает это автоматически, и мне нужно только использовать фасад кэша, если я хочу что-то изменить или что-то еще, верно?

Вот случайный пример из учебника:

$posts = Cache::remember('index.posts', 30, function()
{return Post::with('comments', 'tags', 'author', 'seo')->whereHidden(0)->get();});

2) при использовании Redis (с пакетом predis) в качестве драйвера кэша, мне нужно использовать фасад кэша, или фасад Redis, или оба в некоторых случаях? Или я могу просто включить Redis в Laravel и server (Digital Ocean droplet on Forge) и больше ничего не делать?

Я видел что-то подобное в документах Laravel, используя фасад кэша:

Cache::store('redis')->put('bar', 'baz', 600);

Я также видел учебник с использованием фасада Redis:

use Illuminate\Support\Facades\Redis; 

Route::get('/', function () { 
     $visits = Redis::incr('visits'); 
     return $visits; 
});

Я не могу понять, что правильно делать.

У вопроса есть решение - Посмотреть?

Ответы - Понимание кэширования Laravel: фасад кэша и Redis / Understanding Laravel caching: Cache facade and Redis

Является ответом!
TsaiKoga

16.11.2019 03:55:34

Общий:

Они все в тайнике .

Они все использованы для уменьшения цены времени .

Differenet:


Конфигурации И Маршруты:

Это относится к применению . Мы называем его кэш приложений .

php artisan config:cache
php artisan route:cache

Эти две команды кэшируют маршруты и конфигурации.

ПУТЬ:

Они всегда хранятся в bootstrap/cache/

Бегущий

php artisan cache:clear

Только очистите каталоги и файлы в bootstrap/cache/.

Они статичны . Поэтому они меняются только тогда, когда вы их меняете.

Выгода

Если вы измените их, вам нужно clearи cacheих вручную.

После того, как вы cahce эти маршруты и конфигурации.

Laravel не нужно снова читать конфигурации и маршруты из файла, что потребовало затрат времени ввода-вывода.


Кэш Файловой Системы И Кэш Redis:

Кэш файловой системы и Кэш Redis - это тоже кэш.

Однако они используют другой драйвер для хранения данных, то есть там, где вы храните данные кэширования .

Путь к файловой системе: если вы используете драйвер файловой системы. они хранятся в storage/framework/cache/

Путь Reids: данные хранятся в redisпо ключу-значению.

Когда вы их используете?

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

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

$posts = Cache::remember('index.posts', 30, function()
{return Post::with('comments', 'tags', 'author', 'seo')->whereHidden(0)->get();});

Первый запрос получает данные сообщений из базы данных, а затем сохраняет эти данные в кэше(Reid или файловой системе) с истекшим сроком действия через 30 сек.

Следующий запрос получает данные сообщений только через кэш. Им не нужно снова искать в базах данных.

А вот этот:

use Illuminate\Support\Facades\Redis; 

Route::get('/', function () { 
     $visits = Redis::incr('visits'); 
     return $visits; 
});

Значит, когда люди запрашивают localhost:8000/, количество посещений пользователей увеличивается в redis(не нужно хранить в базе данных, это стоит больше времени), в следующий раз, когда запрос на поиск посетит count, его можно найти в redisочень быстро.

PS: здесь используется фасад Redis, затем данные хранятся в redis.

Если вы используете redis в качестве драйвера кэша, Cache::remember()также будет хранить данные в redis.

Однако, используя Redis Facade, вы можете использовать множество методов redis.

Что лучше?

Я думаюredisлучше, чем filesystemсистема .

  1. Потому redisхранит данные в памяти, а файловая система-на диске. Считывание данных из памяти происходит быстрее, чем с диска.

  2. Работать с данными в Redis проще, чем с файловой системой. Например, Redis поддерживает очистку всего кэша для определенного тега, но файловая система не может[потому что файловая система хранит данные кэша по имени зашифрованного ключа].

  3. Для распределенного сервера кэш файловой системы-это плохая идея. Более низкий коэффициент попадания в кэш.

Честно говоря, есть и другие драйверы, которые можно выбрать, например mongodb.

Кстати, мой английский не очень хорош, надеюсь, вы понимаете.

https://stackoverflow.com/questions/58890788/understanding-laravel-caching-cache-facade-and-redis/58890968#comment104048438_58890968
Хорошо, теперь я понимаю, что мне нужно использовать фасад кэша самостоятельно, по крайней мере, при использовании драйвера "file". Ларавель не будет автоматически творить магию. Просто чтобы быть на 100% ясным - должен ли я делать то же самое, если использовать Redis в качестве драйвера? Должен ли я по-прежнему использовать кэш или фасад Redis для запросов, как в моих примерах? Или это будет просто работать из коробки на стороне сервера? Я посмотрел на некоторые учебники Cloudways по Redis и Laravel, и они просто говорят, чтобы включить Redis на сервере и в Laravel, и все! Это заставляет меня думать, что я не должен делать ничего другого в моем коде. Это просто работает.
https://stackoverflow.com/questions/58890788/understanding-laravel-caching-cache-facade-and-redis/58890968#comment104050176_58890968
@RaduB если вы используете Redis, вам просто нужно установить redis на вашем сервере и запустить redis. А затем измените конфигурацию драйвера с fileна redis. Затем, когда вы используете метод кэша, он автоматически сохраняет данные в redis.
https://stackoverflow.com/questions/58890788/understanding-laravel-caching-cache-facade-and-redis/58890968#comment104050324_58890968
@RaduB я обновил более подробную информацию.
https://stackoverflow.com/questions/58890788/understanding-laravel-caching-cache-facade-and-redis/58890968#comment104052223_58890968
Ладно, думаю, теперь я понял. Даже если я изменю драйвер на Redis, мне все равно нужно использовать кэш или фасад Redis для моих запросов. Фасад кэша также можно использовать для хранения данных в Redis, но лучше всего использовать фасад Redis, чтобы использовать больше связанных с Redis методов. Спасибо! Это очень помогло!
Помочь в развитии проекта:
Закрыть X