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直到他退出...
答案 0 :(得分:0)
CacheManager是一个单例,这意味着它在请求之间共享。您当前正在做的是每次为所有会话覆盖user
缓存条目。
您可以尝试将新的CacheManager实例绑定到会话范围,但是为每个用户单独生成CacheManager是非常昂贵的。
我会这样做:只需将userId
保留在会话中,然后
cacheManager.cacheObject("user/" + userId, user);
和
UsersModel user = (UsersModel)cacheManager.retriveObject("user/" + userId);
请记住,可能会从缓存中删除对象,因此您最终需要再次查询它。