Небольшой кешер

Добавил в каталог небольшой плагин-кешер, которых умеет сохранять полученный объекты пользователей на время жизни инстанса плагина.
Т.е. плагин локально хранит объект пользователя и при его повторном запросе не обращается заново к кешу или БД, а просто возвращает его из массива.


Плагин на GitHub.
Сказать спасибо можно на ЯД 410011972198043.

12 комментариев

avatar
Подскажите несведущему — немного не понятно цель плагина, чем плохо обращение к стандартному кешу? Быстрее работа?
avatar
Да, в общем случае быстрее вернуть данные из переменной в php, чем залезать в стандартный кешер. Ну и нужно понимать, что плагин не отменяет обращения к кешеру, а кеширует их повторно в памяти php на время формирования ответа. Т.е. при первом получении пользователя идет обращение к кешеру или БД, а во втором и последующем — сразу из php.

Заметно будет не всегда — у меня есть страницы, где часто выводятся аватарки/ники пользователей (как в коментариях, прямом эфире и т.д.).
avatar
Спасибо за развернутый ответ, понятно!
avatar
Быстрее — не то слово. Вернуть данные из массива на несколько порядков быстрее чем из memcached.
avatar
1. Правильно я понимаю, что этот кешер будет давать эффект когда в течении одного запуска движка, к примеру когда мы открываем страницу с комментариями, происходят повторные обращения к объектам пользователей? Ну например, вывели мы один комментарий, обратившись к мемкешу, пошли дальше, если встретится еще один комментарий от того же пользователя, то возьмем данные из массива?
2. Возможна ли ситуация, когда в логике или движка, или плагинов в какой-то момент времени происходит модификация данных в кеше, а мы по-прежнему берем устаревшие из массива?
avatar
1. Правильно я понимаю, что этот кешер будет давать эффект когда в течении одного запуска движка, к примеру когда мы открываем страницу с комментариями, происходят повторные обращения к объектам пользователей? Ну например, вывели мы один комментарий, обратившись к мемкешу, пошли дальше, если встретится еще один комментарий от того же пользователя, то возьмем данные из массива?

Совершенно верно. Локальный кешер жив только в момент жизни инстанса движка. И заметная польза от него только в тот момент, когда при формировании страницы объект пользователя запрашивается больше одного раза.

2. Возможна ли ситуация, когда в логике или движка, или плагинов в какой-то момент времени происходит модификация данных в кеше, а мы по-прежнему берем устаревшие из массива?

Кешер проксирует два метода — GetUserById и Update. Если объект пользователя изменяется методом Update, то кешер сбрасывает кеш для этого пользователя. Если поменять данные напрямую в БД или сбросив руками значения в мемкеше по тегу, то кешер об этом не узнает.
avatar
Спасибо, попробуем…
А может имеет смысл расширить состав проксируемых методов?
avatar
Честно говоря, особого смысла не вижу, т.к. метод GetUserById во время формирования страницы может быть вызван несколько раз с одним и тем же параметром, а вот остальные методы — вряд ли.

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

Та же самая картина и с другими объектами в LS. Топики, комментарии врядли будут запращиваться более одного раза в рамках одного инстанса. Их так же нет смысла проксировать.
avatar
отлично работает.
avatar
Спасибо за плагин!
avatar
Довольно неплохо!
avatar
И правда хорошо работает
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.