Как стать автором
Обновить

Комментарии 4

await client.set(key, JSON.stringify(result)) - тут, наверное, можно и без эвейта. Хотя это вряд ли значительно повлияет на производительность в общем случае, но в случае (притянутого за уши в качестве аргумента) дидоса подсетки с кешем, возможно, позволит сохранить сайт доступным для пользователей :). Впрочем, там и в других строчках нужно делать зависимсоть от кеша менее жёсткой. Мне кажется это важным, кеш должен легко и прозрачно "отсоединяться" (админом/девопсом без каких-то дополнительных взаимодействий с приложением, для обновления серверов, например). В общем, валить приложение/запрос полностью при проблемах с кешем обычно не принято.

Ну и самое главное - а как инвалидировать кеш-то? Где задаётся таймаут или условия стирания ключа? Пока пригодно только для ReadOnly- или AppendOnly-хранилищ, кажется.

И исследовали ли интернет на предмет аналогов? Например, https://github.com/AkhilSharma90/mongooserediscache выглядит вполне себе рабочей версией (поддерживает инвалидацию только по таймауту, правда). Думаю, вам после доведения до "коробки" механики инвалидации (было бы круто, чтобы запросы на запись инвалидировали соответствующие кеши на чтение, а не только по таймауту, если такой менеджмент не станет оверхедом в самом приложении, требуя от программиста указания кучи параметров) тоже стоит оформить это в виде пакета, а не туториала :).

P.S.: У программистов, как говорят, вообще всего две проблемы в жизни - инвалидация кеша и выбор имени переменной :). Всё остальное тривиально.

Добрый день.

По поводу await - да, соглашусь: выглядит избыточно.

Аналоги. Признаюсь, не смотрел. Наверное, одной из идей этой статьи было желание обратить внимание читателя на возможности "залезания под капот" большим пакетам и на примере показать, как это можно сделать. Если говорить про конкретный аналог, который Вы привели, то вижу там уязвимость в том, что важная часть ключа кэша может быть потеряна, потому что автор решения не включает туда наименование операции ( count может быть спутан с find), а так же игнорируются опции запроса( например, limit), что негативно скажется на тех же пагинированных запросах.

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

для nodejs ? а для других языков как это будет выгляять и имеется такое? например java C#

Добрый день. Данное решение использует особенности JS и написанных под него пакетов, поэтому - да, применимо только в рамках NodeJS.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации