Кэш третьего уровня для NHibernate

Наш проект использует Entity Framework и имеет 2 типа кеша (в памяти, Redis) без поставщика кеша. Из-за отсутствия поддержки кеша второго уровня в EF мы внедрили его сами. Таким образом, наш кеш в памяти - это простой набор пары значений ключа, где ключ - Id кеша, а значение - это кешированный объект. Мы также реализовали аналогичное кэширование для использования Redis. Для запроса мы рассмотрим список кэшей в памяти и, если это не тот, мы смотрим на redis, а если его нет, мы запрашиваем базу данных.

Поскольку сущностные сущностные сущности имеют ссылку на контекст, мы не можем использовать объект DbContext в кешировании, и нам нужно его сопоставить. Поэтому нам нужно создать много DTO.

Я знаю, что кеш сквозная проблема, поэтому я ищу более чистое решение. По этой причине сначала я решил использовать Memcached для In-Memory (вместо простого списка). Второй и, самое главное, я могу перейти от EF к NHibernate для поддержки второго кэша. Я знаю, что кеш первого уровня занят объектом сеанса. Поэтому я хочу использовать Memcached для кеша второго уровня. Но есть ли для Redis кеш третьего уровня?

Ответ 1

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