公司要求用Redis做一个在线用户共享session,并能够统计出所有在线用户的数量及要能够查看每个用户的信息。
首先我们要认识到Spring-session共享session之后,你每次只能读取到当前最新session,并不能得到全部的存储到Redis中的数据。解决方法:使用 RedisTemplate的 redisTemplate.keys();则可以根据你的需要读取所有的key,然后根据key调用 redisTemplate.opsForHash().get()查到你要的数据。
这里要注意:Spring-session共享session之后是有他自己的存储规则的,我们应该根据规则将我们的数据取出。
主要代码:
Set keys = redisTemplate.keys("spring:session:sessions:*"); //取出redis中所有session的key ArrayList userList = new ArrayList();
for(String key : keys){
if(key.indexOf("expires")==-1){
userList.add((UserSession) redisTemplate.opsForHash().get(key, "sessionAttr:userSession"));
}
}
网友评论