关于go:一个账号能同时登录若干台设备终极方案

2次阅读

共计 526 个字符,预计需要花费 2 分钟才能阅读完成。

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

正文完
 0