每日一面 - 限制用户设备

简介: 每日一面 - 限制用户设备
问题参考自: https://www.zhihu.com/question/439438146 ,答案为个人原创

用户登录,保存30天的免登,只允许两个设备登录,如果有第三个设备登录,踢掉第一个。改密码的时候,所有设备需要下线。这个逻辑怎么实现呢?

使用 Redis 存储用户 ,登录的设备实现,利用 ZSET。

存储结构如下:


微信图片_20220624203233.jpg


每个用户一个 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
相关文章
|
5月前
|
负载均衡 监控 安全
Wi-Fi漫游深入解析:确保设备连接的有效策略
Wi-Fi漫游深入解析:确保设备连接的有效策略
555 9
|
6月前
|
传感器 编解码
SFNC —— 设备控制(二)
SFNC —— 设备控制(二)
76 3
|
6月前
|
安全 数据安全/隐私保护
设备安全
【8月更文挑战第11天】
70 2
|
9月前
|
网络虚拟化 数据安全/隐私保护 网络架构
无线网络管理设备
无线网络管理设备
78 3
|
9月前
|
安全 数据安全/隐私保护 智能硬件
智能家电设备连接与验证的流程
智能家电设备连接与验证的流程
293 1
|
9月前
|
JavaScript
亚丁号云控之云控设备
亚丁号云控之云控设备
61 0
计算机维修的工具与设备
计算机维修的工具与设备。
119 1
|
9月前
|
Linux 数据安全/隐私保护 Docker
提升家庭自动化级别:使用HomeAssistant添加HACS插件,实现对米家、HomeKit等智能家居设备的公网控制
提升家庭自动化级别:使用HomeAssistant添加HACS插件,实现对米家、HomeKit等智能家居设备的公网控制
|
监控 Android开发
GB28181状态信息报送解读及Android端国标设备接入技术实现
今天主要聊聊GB/T28181状态信息报送这块,先回顾下协议规范相关细节,然后再针对代码实现,做个简单的说明。
185 0
|
算法 编译器 C语言
达夫设备简单介绍
达夫设备简单介绍
175 1