是否应该通过setAttribute将重量级的java对象保存在会话中?这是servlet开发的一个好习惯吗?

时间:2009-11-23 14:36:51

标签: java session servlets

我的意思是如果我构造一个重型对象[包括集合和一堆道具]并且我需要在会话期间不时地查询该对象,我应该用setAttribute保存它还是我需要在某处保存它?这里有什么最佳做法?

2 个答案:

答案 0 :(得分:1)

如果要缓存它,请将其放在外部缓存(二级缓存,memcached或其他缓存服务器)中,而不是放在会话中。会话应尽可能小,因为服务器可能会将其序列化为磁盘。

答案 1 :(得分:1)

让我们假设您可以在需要时从持久层重建重物,这纯粹是一种优化。然后这真的变成了“它依赖”。如果您的Web应用程序在单个服务器上运行并且没有太多用处,那么这两种方式都没有多大关系,因此选择对您来说最简单的解决方案。

如果您在整个应用程序服务器集群上运行Web应用程序(具有大量用途),通常需要避免会话状态以实现可伸缩性。但您仍然可以在应用服务器集群外部缓存这些结构以提高性能(例如,在HTTP缓存或memcached分布式缓存中)。

然后有一个广泛的中间地带,应用服务器群集可以运行粘性会话(每个会话的流量路由到同一个应用服务器)或群集支持会话(它维护会话数据,并将其迁移到无论服务器需要它。)