Кеширование DAL возврата объектов?

Мне было интересно, должен ли я каким-то образом кэшировать объекты, возвращенные из моего DAL? У меня может быть несколько элементов управления пользовательского интерфейса, вызывающих одни и те же данные в одной загрузке страницы.

Что бы вы порекомендовали, ребята? Я начинаю немного осторожничать? Это не ужасное количество данных. Но если мне нужно каким-то образом кешировать, какой будет рекомендуемый подход?

3 ответа

Решение

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

myControl.AllUsers = _allUsers;
....
myOtherControl.AllUsers = _allUsers;

Я также согласен с @DanielHilgarth. Кэширование добавляет сложности (например, когда обновлять кеш). Если страница все равно быстро загружается, я бы не стал беспокоиться.

Если страница медленная, вызовы базы данных в циклах часто являются причиной моего опыта.

Это зависит от того, насколько это безопасно и необязательно. Если данные, с которыми вы работаете, не требуют данных в реальном времени (т. Е. Вашего блога), то во что бы то ни стало кэшируйте данные, если считаете, что в этом нет необходимости (то есть ваш сайт работает медленно).

Проблема с кэшированием, которую люди часто забывают учитывать, заключается в возможности очистки кэша по требованию, если требуется немедленный ответ (например, вы забаните пользователя или обновите информацию о платежном шлюзе).

Существует два основных типа кэширования: скользящий кэш и фиксированный кэш.

Скользящий кэш (кэш, который расширяется каждый раз, когда выполняется корректный поиск), отлично подходит для ресурсов, которые относительно легко вычисляют значения, но могут страдать от нагрузки на базу данных / сеть. Кэшируйте на 1 час (или всегда) в скользящем кеше, а затем вручную аннулируйте (удаляйте) кеш всякий раз, когда для DAO происходит INSERT / UPDATE / DELETE. Таким образом, пользователь увидит результаты в реальном времени, но будет по возможности кэшировать их.

Кэш с фиксированным временем отлично подходит для ресурсов, которые трудно выполнить (т.е. очень сложная хранимая процедура) и не требуют точности в реальном времени. Кэшируйте на 1 час (или всегда) в первый раз, когда это будет запрошено, и не очищайте кеш, пока не истечет этот первый час. INSERT / UPDATE / DELETE игнорируется вашим механизмом кэширования (если это не является абсолютно необходимым).

Для этого вы можете посмотреть на эту библиотеку:

http://www.reactiveui.net/

это обеспечивает аккуратный способ кэширования ваших объектов.

Я бы сказал, что это очень аккуратный способ.

Другие вопросы по тегам