1、一个账号在登录的时候,都给其分配一个token. token在 redis中的对应关系是【key: token , vaule: userId】(使用Redis字符串类型保存),
然后userId在 redis中的对应关系也还是【key: userId , value: userInfo】(使用Redis有序集合来保存).但是 userInfo 里面不再是用户的基本信息了,
这里面需要增加一个属性 loginTokenList,用来保存此账号已经登录的 token 集合.

2、当账号登录的时候,根据 userId 取出 userInfo ,然后拿到loginTokenList,逐一判断 token 是否失效,然后简单判断一下过滤后的loginTokenList size 即可.
注意:这里更新 userInfo 信息时候同样是需要原子操作的(lua 脚本),因为是登录,所以明显这里的并发要小很多,所以这里原子性的更新对 redis 系统几乎没有影响.

3、当用户访问页面的时候,我们还是同样的根据token获取userId,再根据userId获取userInfo.这里同上,
用户访问页面的时候尽量不要去检查和更新 userInfo 里的loginTokenList, 直接判断通过token能否获取到数据即可。


goper
413 声望26 粉丝

go 后端开发