В настоящее время я внедряю веб-сервис REST с использованием CouchDB и RESTlet. Уровень RESTlet в основном предназначен для аутентификации и некоторой незначительной фильтрации данных JSON, обслуживаемых CouchDB:
Клиенты <= HTTP => [RESTlet <= HTTP => CouchDB]
Я также использую CouchDB для хранения данных для входа пользователя, потому что я не хочу добавлять дополнительный сервер базы данных для этой цели. Таким образом, каждый запрос к моему сервису вызывает два запроса CouchDB, выполняемых RESTlet (данные аутентификации + «реальный» запрос). Чтобы максимально повысить эффективность службы, я хочу уменьшить количество запросов, в данном случае избыточных запросов на данные для входа.
Моя идея сейчас состоит в том, чтобы предоставить кеш (i.e.LRU-Cache через LinkedHashMap) в моем приложении RESTlet, которое кэширует данные для входа в систему, потому что HTTP-кэширования, вероятно, будет недостаточно. Но как мне сделать данные кеша недействительными, например, когда пользователь меняет пароль? Благодаря REST приложение может работать на нескольких серверах параллельно, и я не хочу создавать центральный экземпляр только для кэширования данных для входа.
В настоящее время я сохраняю запрошенные данные аутентификации в кеше и пытаюсь авторизовать новые запросы, используя их. Если аутентификация не удалась или теперь есть доступная запись, я отправлю запрос GET в мое хранилище CouchDB, чтобы получить фактические данные аутентификации.
Так что в худшем случае пользователи, которые изменили свои данные, возможно, все еще смогут войти в систему со своими старыми учетными данными. Как я могу справиться с этим?
Или какова хорошая стратегия для поддержания кеша (ов) в актуальном состоянии в целом?
Заранее спасибо.