|
|
|
Кеширование объектов
|
|||
|---|---|---|---|
|
#18+
Подскажите пожалуйста, как реализовать такую фичу. Есть класс SessionsKeeper, у которого есть List<Session> sessions. Session - это мой класс, который содержит поля id,sessionAttributes, expireDate и тп. Когда новый клиент заходит в систему, то создается новый объект класса Session и помещается в в список sessions в классе SessionsKeeper. SessionsKeeper - это singleton, который содержит список сессий для всего приложения. Периодически запускается scheduler, который удаляет из списка sessions те сессии, у которых expireDate уже больше текущей даты. Если количество сессий будет увеличиваться, у меня возникнет проблема с нехваткой памяти. 1. Как можно измерить размер объекта SessionsKeeper? 2. Как лучше реализовать кеширование этого объекта на жесткий диск (при достижении заданного размера) и считывания оттуда при запросе объекта SessionsKeeper? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 21:25:02 |
|
||
|
Кеширование объектов
|
|||
|---|---|---|---|
|
#18+
Лисапед на лисапеде... Свой session tracker. Свой GC. Своя база данных. Если персистить список нужно. То проще уже базу данных прикрутить. Любой NoSQL даже подойдет. Scheduler можно скедулить так, чтобы он запускался по наступанию expireDate. Не будет холостых запусков. Зачем это всё, в целом, когда есть сервлеты, Netty и много чего ещё готового тоже не понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 21:46:24 |
|
||
|
Кеширование объектов
|
|||
|---|---|---|---|
|
#18+
А если заюзать CashBuilder от Google Guava? У него есть ограничитель maximumSize() и expireAfterWrite(), когда будут удаляться зачения после указанного периода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2013, 01:04:37 |
|
||
|
Кеширование объектов
|
|||
|---|---|---|---|
|
#18+
osonПериодически запускается scheduler, который удаляет из списка sessions те сессии, у которых expireDate уже больше текущей даты. Пользователи которые работают "ночью" будут этому очень рады. Когда их сессия вдруг пропадет. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2013, 08:03:09 |
|
||
|
Кеширование объектов
|
|||
|---|---|---|---|
|
#18+
expireDate - это не только дата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2013, 16:15:11 |
|
||
|
Кеширование объектов
|
|||
|---|---|---|---|
|
#18+
У ehcach есть такой класс CacheManager. Если я в своем SessionKeeper буду вместо добавления новой сессии в List<Session> sessions добавлять в Cache Код: java 1. 2. 3. 4. 5. и доставать оттуда по id Код: java 1. 2. 3. 4. 5. 6. И expiredTime установить в конфиге для cacheManager Код: java 1. 2. 3. можно использовать такой подход для хранения сессий? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2013, 16:22:57 |
|
||
|
Кеширование объектов
|
|||
|---|---|---|---|
|
#18+
oson, К слову. Рекомендую подумать над альтернативным подходом. О нем рассказывали недавно в этом докладе: http://rsdn.ru/forum/java/5153043.1 Смысла трекать сессии на сервере особого нет. Все сессийные данные, включая expireDate, можно отдавать клиенту. Это немного увеличит траффик. Но зато очень сильно разгрузит сервер и особенно возможности масштабирования. Ваш список, его persistence и failover станет не нужен. Чтобы клиент не мог подделать данные, то же expireDate, они просто подписываются\шифруются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2013, 16:23:13 |
|
||
|
|

start [/forum/topic.php?fid=59&gotonew=1&tid=2129312]: |
0ms |
get settings: |
18ms |
get forum list: |
22ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
46ms |
get topic data: |
17ms |
get first new msg: |
11ms |
get forum data: |
4ms |
get page messages: |
88ms |
get tp. blocked users: |
3ms |
| others: | 317ms |
| total: | 536ms |

| 0 / 0 |
