Кеширование DAL возврата объектов?
Мне было интересно, должен ли я каким-то образом кэшировать объекты, возвращенные из моего DAL? У меня может быть несколько элементов управления пользовательского интерфейса, вызывающих одни и те же данные в одной загрузке страницы.
Что бы вы порекомендовали, ребята? Я начинаю немного осторожничать? Это не ужасное количество данных. Но если мне нужно каким-то образом кешировать, какой будет рекомендуемый подход?
3 ответа
Вы можете кешировать AND, если у вас действительно есть несколько элементов управления на одной странице, использующих одни и те же данные, вы можете вызвать данные один раз на родительской странице и передать ссылку на них каждому элементу управления с помощью Setter в каждом элементе управления (вместо того, чтобы каждый элемент управления выдвигался). те же данные из самого DAL), например:
myControl.AllUsers = _allUsers;
....
myOtherControl.AllUsers = _allUsers;
Я также согласен с @DanielHilgarth. Кэширование добавляет сложности (например, когда обновлять кеш). Если страница все равно быстро загружается, я бы не стал беспокоиться.
Если страница медленная, вызовы базы данных в циклах часто являются причиной моего опыта.
Это зависит от того, насколько это безопасно и необязательно. Если данные, с которыми вы работаете, не требуют данных в реальном времени (т. Е. Вашего блога), то во что бы то ни стало кэшируйте данные, если считаете, что в этом нет необходимости (то есть ваш сайт работает медленно).
Проблема с кэшированием, которую люди часто забывают учитывать, заключается в возможности очистки кэша по требованию, если требуется немедленный ответ (например, вы забаните пользователя или обновите информацию о платежном шлюзе).
Существует два основных типа кэширования: скользящий кэш и фиксированный кэш.
Скользящий кэш (кэш, который расширяется каждый раз, когда выполняется корректный поиск), отлично подходит для ресурсов, которые относительно легко вычисляют значения, но могут страдать от нагрузки на базу данных / сеть. Кэшируйте на 1 час (или всегда) в скользящем кеше, а затем вручную аннулируйте (удаляйте) кеш всякий раз, когда для DAO происходит INSERT / UPDATE / DELETE. Таким образом, пользователь увидит результаты в реальном времени, но будет по возможности кэшировать их.
Кэш с фиксированным временем отлично подходит для ресурсов, которые трудно выполнить (т.е. очень сложная хранимая процедура) и не требуют точности в реальном времени. Кэшируйте на 1 час (или всегда) в первый раз, когда это будет запрошено, и не очищайте кеш, пока не истечет этот первый час. INSERT / UPDATE / DELETE игнорируется вашим механизмом кэширования (если это не является абсолютно необходимым).
Для этого вы можете посмотреть на эту библиотеку:
это обеспечивает аккуратный способ кэширования ваших объектов.
Я бы сказал, что это очень аккуратный способ.