Я пытаюсь внедрить кэширование в существующее серверное приложение, потому что база данных начинает перегружаться.
Как и во многих серверных приложениях, у нас есть концепция уровня данных. Этот уровень данных имеет много разных методов, которые возвращают объекты модели домена. Например, у нас есть объект доступа к данным сотрудника с такими методами:
- findEmployeesForAccount (long accountId)
- findEmployeesWorkingInDepartment (идентификатор длинной учетной записи, идентификатор длинной позиции)
- findEmployeesBySearch (длинный accountId, поиск строки)
Каждый метод запрашивает базу данных и возвращает список объектов домена Employee.
Очевидно, что мы хотим как можно больше кешировать, чтобы ограничить количество запросов, попадающих в базу данных, но как мы будем это делать?
Я вижу пару возможных решений:
1) Мы создаем кеш для каждого вызова метода. Например. для findEmployeesForAccount мы добавили бы запись с ключевым account-employee-accountId. Для findEmployeesWorkingInDepartment мы могли бы добавить запись с ключом департамент-сотрудники-accountId-департамент-идентификатор и так далее. Проблема, с которой я сталкиваюсь, заключается в том, что, когда мы добавляем нового сотрудника в систему, мы должны убедиться, что добавляем его в каждый список, где это уместно, что сложно поддерживать и подвержено ошибкам.
2) Мы создаем более общий запрос для findEmployeesForAccount (с большим количеством объединений и / или запросов, потому что потребуется больше информации). Для других методов мы используем findEmployeesForAccount и удаляем записи из списка, которые не соответствуют указанным критериям.
Я новичок в кэшировании, поэтому мне интересно, какие стратегии люди используют для обработки подобных ситуаций? Любые советы и / или ресурсы по этому типу материала будет принята с благодарностью.