Nano Hash - криптовалюты, майнинг, программирование

Ключ кэша веб-страницы ehCache на основе файлов cookie

Фон

Я хочу кэшировать HTML-ответ некоторых моих страниц. Так как ehCache уже используется в моем приложении, очевидно искать решение там. Так уж получилось, что в ehCache есть готовые фильтры, такие как SimplePageCachingFilter.

Проблема

Эти фильтры обычно используют URL, включая строку запроса в качестве ключей. В моем случае у разных пользователей будет один и тот же URL-адрес, а содержимое этой страницы будет разным. Я не могу добавить идентификатор пользователя в строку запроса. Поэтому, возможно, решение для меня состоит в том, чтобы кэшировать страницы на основе файла cookie [или использовать какой-либо другой уникальный идентификатор пользователя] как часть ключа.

Вопрос

Мой вопрос заключается в том, как использовать другой ключ, отличный от того, который используется SimplePageCachingFilter. В документации предлагается переопределить javax.servlet.http.HttpServletRequest, чтобы учесть важный параметр QS, но не говорится о том, как я могу полностью переопределить способ формулировки ключа.

Отсутствие примера кода также является проблемой, поэтому я был бы признателен, если бы кто-нибудь указал мне пример кода с лучшим управлением клавишами.

Также было бы неплохо иметь контроль над аннулированием кеша, а не просто ждать, пока содержимое истечет само по себе, хотя это и не обязательно для моего приложения.


Ответы:


1

Из исходного кода SimplePageCachingFilter видно, как создается ключ для кеша:

protected String calculateKey(HttpServletRequest httpRequest) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(httpRequest.getMethod()).append(httpRequest.getRequestURI()).append(httpRequest.getQueryString());
String key = stringBuffer.toString();
return key;

Вы можете переопределить только этот метод, чтобы включить идентификатор сеанса (уникальный для каждого пользователя) в ключ (на основе URL-адреса), например:

protected String calculateKey(HttpServletRequest httpRequest) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(httpRequest.getSession().getId()).append(httpRequest.getMethod()).append(httpRequest.getRequestURI()).append(httpRequest.getQueryString());
String key = stringBuffer.toString();
return key;

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

18.03.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..