每日一面

阅读: 评论:0

每日一面

每日一面

问题参考自: ,答案为个人原创

用户登录,保存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 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23