@eugene159

Зачем для кеширования использовать Redis, если можно сделать файловое кеширование?

Часто слышал, что Redis используют для кеширования. У меня возник вопрос. Чем Redis лучше файлового кеширования? На подключение .php файла с нужными данными уйдет меньше времени и ресурсов, чем на получение данных из Redis. Таким образом, хранить кеш в .php файлах эффективнее. Зачем тогда для этой цели используют Redis?
  • Вопрос задан
  • 370 просмотров
Решения вопроса 3
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Вы очень узко понимаете понятие кэширования.
И забываете о том, что из кэша не только читают, но в него еще и пишут.
в .php файлах эффективнее хранить не кэш, а какую-то статичную информацию, которая редко изменяется (скажем, только при деплое), и при этом общую для всех пользователей. При соблюдении этих условий кэширование в .php файлах вполне себе используется.

Но понятие кэша гораздо шире. Кэшироваться может и специфичная для конкретного пользователя или запроса информация. В этом случае никаких .php файлов не напасешься.

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

Еще одна причина, не главная, но все равно важная - масштабирование. Один сервис редиса можно использовать с несколькими инстансами РНР. Плюс сам редис можно масштабировать на несколько физических инстансов.
Ответ написан
Комментировать
delphinpro
@delphinpro Куратор тега PHP
frontend developer
Redis - Это БД в памяти, а не на диске. Отсюда следует, что скорость доступа к ней уже больше, только по этой причине. Плюс там есть еще дофига плюшек, в том числе постоянное хранение данных.
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Разработка софта - это наука не теоретическая а практическая. Кеш или мемоизация вычислений - это просто один из множества паттернов оптимизации. Вполне возможно что найдется задача где Redis не нужен. Или при интенсивной записи может оказаться что затраты на актуализацию кешей перекрывают
их полезный эффект при чтении. Кеши могут быть отравлены (poisoned) кривыми данными с бесконечным TTL
и это может быть проблема. Кеши могут требовать реализации чуть более сложных веб-сценариев с
If-None-Match или If-Modified-Since. Тоесть их использование не бесплатно для разработки. Ну это не
чек-боксик включить. Это - архитектурный вопрос и над ним надо думать.

Redis, как и микро-сервис может физически лежать на другом хосте или образовывать кластер поэтому одно преимущество у него уже есть - это раздельное использование ресурсов.

Вообще для Redis и Nginx не существует оценочной формулы полезного эффекта. Вы просто берете
за образец некую работающую систему. Смотрите как на best practices и применяете к своей задаче.

И потом через A/B тестирование смотрите какие были полезные изменения. Что стало лучше работать.
Что стало хуже (плата за биллинг использования новых серверов или нодов или больше памяти).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы