存储在应用程序会话中的集合变为null

时间:2012-09-27 20:47:20

标签: java android google-app-engine session

我构建了一个服务器 - 客户端Android应用程序,用户在其中注册到服务器,并且每个用户配置文件都保存在数据库和集合池中,我将其保存在应用程序会话中。

我在会话中保存所有现有用户的原因是用户经常更新其他用户。并且从谷歌应用引擎数据存储中读取,这通常会花费我很多。

第一个月工作正常,但今天我的会话中有1000个配置文件开始变坏了。突然间,配置文件的集合变为空,我不得不“重新启动”服务器,以便配置文件再次加载到会话中。

我想我在会话中保存所有个人资料的设计是错误的。我对吗? 或其他可能导致空集合?

我可以使用任何设计模式来做正确的事吗?

1 个答案:

答案 0 :(得分:0)

我不知道会话的内部以及如何在GAE中处理它们,但我的第一个猜测是会话太大而无法在请求之间正确序列化。

我的建议是使用MemCache存储用户列表。典型的模式是将所需的表存储在数据库中(包括您提到的每个用户的连接池)。然后,在第一次创建会话时或实际需要时,将数据从数据库加载到MemCache中。

一旦缓存,您可以直接使用它而无需额外的数据库查询。如果做得好,这是非常强大的,也不应该让你遇到性能问题。请记住,MemCache可以被系统随机清除,因此如果MemCache尚未初始化或重置,您需要确保从DB加载它。