业务设计技巧---登录拉黑功能,实现拉黑用户和把已经登陆用户踢下线

✅实现一个登录拉黑功能,实现拉黑用户和把已经登陆用户踢下线。

典型回答

这个问题,主要分两部分,一部分是拉黑,一部分是踢下线。分开讨论。

拉黑

用户的拉黑,可以看是哪种拉黑方式,如果是单个用户的拉黑,可以提供一个后台接口,在管理端,通过输入用户的手机号,或者用户 ID 进行拉黑,如果是批量的,那么就需要提供一个页面,支持批量上传用户列表。

其次就是拉黑功能的实现,有3种方式,第一种是加黑名单,第二种是更新用户的状态,第三种是在用户表上打标。

第一种是不修改用户表的方案,即我们单独有一张黑名单表,这里记录了用户的黑名单的列表,这么做的好处是可以和用户表解耦,互相不干预,而且还有个好处,就是可以做很多其他的事情,比如说拉黑开始时间、拉黑结束时间等等的各种控制。

第二种和第三种方案本质上是一样的,就是在用户表上有个字段表示这个用户的被拉黑了。

如果用户量比较大,或者是拉黑的用户比较多,建议用第一种方案,而且这个名单还可以前置给到其他的业务一起用,比如风控。如果用户量不大的话,没必要搞这个黑名单表,用户表加一个状态或者字段就行了。

然后为了提升性能,针对用户的黑名单,还可以做缓存,将黑名单用户缓存在 Redis 或者本地缓存中,可以快速的针对黑用户进行拦截,而且黑名单非常适合使用布隆过滤器!如果量很大,可以进一步的用布隆过滤器来做缓存。

典型回答布隆过滤器是一种数据结构,用于快速检索一个元素是否可能存在于一个集合(bit 数组)中。它的基本原理是利用多个哈希函数,将一个元素映射成多个位,然后将这些位设置为 1。当查询一个元素时,如果这些位都被设置为 1,则认为元素可能存在于集合中,否则肯定不存在。所以,布隆过滤器可以准确的判断...

踢人下线

除了拉黑外,还有一个功能就是踢人下线,这个功能其实也简单,只需要我们把用户登录后的 Session 给他清空就行了。这样用户在下次访问我们的系统的时候,因为查不到 Session,就是被强制下线了。

至于实现方式,要看 Session 存在哪,比如 Redis 的话,那么就找到这个用户的 ID,然后把他对应的 Session 给他清空即可。

如果用的是那种单点登录的框架,很多都是支持这些功能的,可能你只需要调一个方法,就可以直接一键踢人下线了。如:sa-token.cc/doc.html#/u...

相关推荐
Thneonl几秒前
ClickHouse UPDATE:一秒返回,三小时才生效
数据库·后端
铁皮饭盒42 分钟前
这6个小模型各有绝活, 且都可cpu/浏览器端运行
前端·后端
qq_406981031 小时前
大白话rust系列08 当变量遮蔽遇上引用,探究变量遮蔽的本质
开发语言·后端·rust
喵了几个咪2 小时前
GoWind ShortPlay 拆解:不用模型的推荐闭环——埋点回流、三路召回与已看去重
开发语言·后端·微服务·golang·gowind
SimonKing2 小时前
又找到一个纯Java的OCR项目,识别的格式还挺多
java·后端·程序员
程序猿DD2 小时前
OctaFuse Gateway 2.17.0:新增维护模式、请求日志汇总、DashScope 语音路由拆分
后端
陈随易3 小时前
副业搞钱点子之赛事与活动
前端·后端·程序员
Profile排查笔记3 小时前
有哪些开源指纹浏览器项目?先核对客户端、内核与许可证
前端·人工智能·后端·自动化
鶴哥只手遮天3 小时前
雷达系统与成像仿真:从电磁散射到工程实现-第 1 章 雷达系统的分层架构与指标闭环
后端
喵了几个咪3 小时前
GoWind UBA 拆解:把 Doris UNIQUE KEY 翻译成 ClickHouse——读数正确性对齐实录
开发语言·后端·clickhouse·微服务·golang·gowind