Я разрабатываю веб-приложение для медицинских целей, где пользователи могут назначить встречу для конкретного пациента, врача и учреждения. В каждом учреждении могут быть N врачей, а в календаре будет указано N назначений на одного врача, а также покажут количество каждого врача (например, «Доктор Кто работает» в среду с 9:00 до 12:00 и с 15:00 до 18:00).Spring + Redis + Mysql: стратегия кеша
Для передней части я использую fullcalendar, а бэкэнд выполнен с использованием Struts2 (контроллеров) + пружина (впрыск зависимостей) + спящий режим (DAO).
Поскольку пользователь (обычно) должен загружать встречи с этой недели до месяца или двух в будущем, и может быть от одного до N пользователей для каждого объекта, который будет использовать это представление в течение длительного времени, я Я хотел бы кэшировать встречи + наличие с помощью Redis, и я добавил в свой проект Spring data redis с клиентом Lettuce. Идея состоит в использовании аннотаций @Cacheable
, @CachePut
и @CacheEvict
для методов DAO, обработки списка действий пользователей, создания и обновления встреч, исключающих конфликты между данными redis и данными базы данных и другими проблемами параллелизма.
Мои вопросы:
- Является ли это правильная стратегия?
- Должен ли я использовать специальный генератор ключей, чтобы кэшировать встречи на объекте + идентификаторы врача?
Образец подходит для модели программирования Spring Cache. Перед началом кэширования вы должны выполнить тесты производительности, чтобы выяснить, является ли Кэширование решением или симптомом. Вы должны убедиться, что ваши объекты сериализуемы - вы не хотите кэшировать прокси-серверы JPA, а данные внутри модели данных. Что касается генераторов ключей: это зависит. Укажите выражение SpEL для создания неконфликтных ключей и посмотрите, подходит ли это. – mp911de