问题参考自: ,答案为个人原创
用户登录,保存30天的免登,只允许两个设备登录,如果有第三个设备登录,踢掉第一个。改密码的时候,所有设备需要下线。这个逻辑怎么实现呢?
使用 Redis 存储用户 ,登录的设备实现,利用 ZSET。
存储结构如下:
每个用户一个 ZSET(假设就是以用户 id 作为 ZSET 的 KEY),里面的 KEY 为设备 id,value 为登录时间戳。
当用户登录时,使用 lua 脚本(防止并发导致登录设备多于 2 个)检查设备:
ZSCORE 判断设备是否存在以及登录时间
如果存在:ZADD就更新SCORE为当前时间戳
如果不存在:ZCARD 用户id 获取当前用户有多少设备如果设备数量 >= 2 则移除除了最后一个的其他设备(可以通过ZRANGE获取最后一个KEY,ZSCORE获取其分数之后ZREMRANGEBYSCORE删除小于这个分数的所有KEY)ZADD设置设备id为KEY,当前时间戳为SCORE
设置ZSET过期时间为30天,减少30天内没有设备登录时检查登录态的判断消耗
当用户请求需要登录态后的 API,检查登录态时:
ZSCORE 判断设备是否存在以及登录时间
如果设备存在存在并且登录时间与当前时间间隔小于30天,则有效。
否则,登录态失效,需要重新登录
修改密码,所有设备下线:
删除这个ZSET
每日一刷,轻松提升技术,斩获各种offer:
本文发布于:2024-01-29 13:58:29,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170650791415772.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |