У меня есть устаревшее хранилище данных, которое легко перегружается, с поверхом слоя REST API уровня ASP. NET Core v2.1. Этот REST API использует кэширование (IMemoryCache
) для уменьшения мгновенной нагрузки на хранилище данных.
Теперь мне нужно добавить своего рода циклический опрос типа хранилища данных, чтобы обновлять элементы, или «обновления в реальном времени». Я хотел бы использовать этот же кэш в контроллере API, если это возможно, вместо того, чтобы добавлять в приложение совершенно другой сервис (redis). Последнее потребовало бы гораздо больше работы из-за изменения архитектуры нашей системы.
Я решил использовать SignalR для этих обновлений в реальном времени. Я добавил SignalR Hub в проект REST API. Браузеры подпишутся на указанный c идентификатор данных (группу), и система уведомит эти группы при обновлении элементов. Стратегия опроса хранилища данных для этих данных - это другой вопрос. Данные, поступающие через SignalR, представляют собой небольшое подмножество данных, предоставляемых API REST.
Но я хотел бы использовать один и тот же кэш на случай, если два или более клиентов запрашивают одни и те же данные в течение короткого периода времени (скажем, , 10 секунд).
Или эта проблема преувеличена?
Оба класса находятся в одном проекте. На данный момент самый простой способ - это иметь каждый доступ к этим данным индивидуально (хотя каждый может иметь свой собственный кэш):
APIController ------- +------+
| Data |
SignalR ------------- +------+
Вот что я ищу:
APIController ------- Cache ---- +------+
- | Data |
SignalR ----------------+ +------+
Теперь я признаю, что похоже, что мне просто нужно redis или memcached, но redis - это то, что мне нужно здесь, и требует красной ленты. Постоянство не требуется, поэтому кэш памяти работает нормально.
Можно ли сделать это с помощью общего класса / службы stati c, внедренного в каждый? Или у меня проблема XY?