我们如何在cacheManager中管理多个用户....

时间:2014-03-11 07:58:25

标签: java jpa

entityManager = JPAUtil.getEntityManager();
UsersModel user = entityManager.find(UsersModel.class,User_Id);
cacheManager = CacheManager.getInstance();
cacheManager.cacheObject("user", user);

这是我在缓存中保留用户详细信息的方式,我将使用:

进行检索
UsersModel user = (UsersModel)cacheManager.retriveObject("user");
user.getUserID();

但是当多个用户登录时出现问题,我只会获得一个用户信息。

我尝试在缓存密钥中保留userID,但在检索记录时我需要知道密钥。

那么,有谁知道解决这个问题的最佳方法?
我正在使用Strust2框架......

Hashtable<CacheKey, Object> cacheManager = new Hashtable<CacheKey,Object>();

这里是user1登录的场景,我把user1对象放在缓存中......

cacheManager.cacheObject(“user”,user);

登录成功后用户1单击帐户信息,我必须获取当前用户详细信息...

UsersModel user =(UsersModel)cacheManager.retriveObject(“user”);

user.getUserID();

user.getName();

同时当user2登录时...它将覆盖缓存....现在存储user2详细信息....所以当user1再次点击AccInfo时,他将获得User2信息...我只是需要保留相应的user_id直到他退出...

1 个答案:

答案 0 :(得分:0)

CacheManager是一个单例,这意味着它在请求之间共享。您当前正在做的是每次为所有会话覆盖user缓存条目。 您可以尝试将新的CacheManager实例绑定到会话范围,但是为每个用户单独生成CacheManager是非常昂贵的。

我会这样做:只需将userId保留在会话中,然后

cacheManager.cacheObject("user/" + userId, user);

UsersModel user = (UsersModel)cacheManager.retriveObject("user/" + userId);

请记住,可能会从缓存中删除对象,因此您最终需要再次查询它。