powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Кеширование объектов
7 сообщений из 7, страница 1 из 1
Кеширование объектов
    #38267265
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пожалуйста, как реализовать такую фичу.
Есть класс SessionsKeeper, у которого есть List<Session> sessions.
Session - это мой класс, который содержит поля id,sessionAttributes, expireDate и тп.
Когда новый клиент заходит в систему, то создается новый объект класса Session и помещается в
в список sessions в классе SessionsKeeper.
SessionsKeeper - это singleton, который содержит список сессий для всего приложения.
Периодически запускается scheduler, который удаляет из списка sessions те сессии, у которых expireDate уже больше текущей даты.

Если количество сессий будет увеличиваться, у меня возникнет проблема с нехваткой памяти.
1. Как можно измерить размер объекта SessionsKeeper?
2. Как лучше реализовать кеширование этого объекта на жесткий диск (при достижении заданного размера) и считывания оттуда
при запросе объекта SessionsKeeper?

Спасибо.
...
Рейтинг: 0 / 0
Кеширование объектов
    #38267285
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лисапед на лисапеде...
Свой session tracker.
Свой GC.
Своя база данных.

Если персистить список нужно. То проще уже базу данных прикрутить. Любой NoSQL даже подойдет.
Scheduler можно скедулить так, чтобы он запускался по наступанию expireDate. Не будет холостых запусков.
Зачем это всё, в целом, когда есть сервлеты, Netty и много чего ещё готового тоже не понятно.
...
Рейтинг: 0 / 0
Кеширование объектов
    #38267454
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если заюзать CashBuilder от Google Guava? У него есть ограничитель maximumSize() и expireAfterWrite(), когда будут удаляться зачения после указанного периода?
...
Рейтинг: 0 / 0
Кеширование объектов
    #38267577
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
osonПериодически запускается scheduler, который удаляет из списка sessions те сессии, у которых expireDate уже больше текущей даты.


Пользователи которые работают "ночью" будут этому очень рады.
Когда их сессия вдруг пропадет. :-)
...
Рейтинг: 0 / 0
Кеширование объектов
    #38268617
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
expireDate - это не только дата.
...
Рейтинг: 0 / 0
Кеширование объектов
    #38268640
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У ehcach есть такой класс CacheManager.
Если я в своем SessionKeeper буду вместо добавления новой сессии в List<Session> sessions
добавлять в Cache


Код: java
1.
2.
3.
4.
5.
public void addSession(Session session)
      {
        Cache cache = cacheManager.getCache("sessionsKeeperCache");
        cache.put(new Element(session.getId(), session));
       }



и доставать оттуда по id

Код: java
1.
2.
3.
4.
5.
6.
public Session getSession(String id)
    {
        Cache cache = cacheManager.getCache("sessionsKeeperCache");
        Element element = cache.get(sessionId);
        return (Session) element.getValue();
    }



И expiredTime установить в конфиге для cacheManager
Код: java
1.
2.
3.
<ehcache:config cache-manager="cacheManager">
        <ehcache:evict-expired-elements interval="1200"/>
    </ehcache:config>



можно использовать такой подход для хранения сессий?
...
Рейтинг: 0 / 0
Кеширование объектов
    #38268641
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oson,

К слову. Рекомендую подумать над альтернативным подходом. О нем рассказывали недавно в этом докладе:
http://rsdn.ru/forum/java/5153043.1
Смысла трекать сессии на сервере особого нет. Все сессийные данные, включая expireDate, можно отдавать клиенту.
Это немного увеличит траффик. Но зато очень сильно разгрузит сервер и особенно возможности масштабирования. Ваш список, его persistence и failover станет не нужен.
Чтобы клиент не мог подделать данные, то же expireDate, они просто подписываются\шифруются.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Кеширование объектов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]