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是否获取到数据即可。