redis替代mysql里token表进行登陆过期、单点登陆、更新数据、主动退出

需求

需支持多终端系统的登陆 有商家后台、运营后台、用户app

单点登陆

主动退出 清理token

定时过期

在token未过期时 账号基本信息变更时需及时更新token中的数据 

 

实现

考虑到能通过userid反查redis中的token 并对token value值更新 需要考虑使用keys来匹配查找,但是听说keys性能不是非常好

对于keys命令的性能情况 建议看下这两位大佬的文章

Redis5.0改进了keys算法吗?python redis的scan_iter性能真的很差!

https://zhuanlan.zhihu.com/p/150790074

关于redis的keys命令的性能问题

https://blog.csdn.net/sanmi8276/article/details/110074521

那么对我来说 我可能希望用内存换区性能 单独给token增加索引 做一个映射方便快速查找 具体方式如下

设置一个用户的token 【用于登陆、单点登陆判断】

//设置指定用户token的映射key
set userapp:userid:11:token userapp:token:d4s6f4asd6f4a6sd5f4a65sdf

//设置过期时间
expire  userapp:userid:11:token 1000

//设置token中存储的用户基础数据
set userapp:token:d4s6f4asd6f4a6sd5f4a65sdf

//设置过期时间
expire  userapp:userid:11:token 1000

在设置指定用户token的映射key中 参数含义为

参数1  userapp为应用名 userid:11:token表示用户id为11的token

参数2 userapp:token:d4s6f4asd6f4a6sd5f4a65sdf 表示为 userapp的token为d4s6f4asd6f4a6sd5f4a65sdf

当然以上名称可以自定义 只是我个人觉得怕重复导致键值被覆盖 也不一定需要用冒号分隔

那么以上就设置好了第一步 毕竟后期通过userid就可以实现查找token  例如方式如下

获取用户token名和获取token下的数据【用于校验登陆或修改更新数据或主动退出】

//获取token名
get userapp:userid:11:token

//通过获取的token名【获取】用户数据
get userapp:token:d4s6f4asd6f4a6sd5f4a65sdf

//通过获取的token名【更新】用户数据
set userapp:token:d4s6f4asd6f4a6sd5f4a65sdf 用户基础数据

//删除多个key 用于主动退出
del userapp:userid:11:token userapp:token:d4s6f4asd6f4a6sd5f4a65sdf

获取结果如下

总结

对于内存紧张的 考虑keys也行 听说redis5 redis6有进行优化 如果用的话 建议自己实际测试下

对于觉得执行多条redis命令消耗太大 那么可考虑结果lua脚本封装成特定功能的函数 并hash方式执行lua脚本减少通信过程的损耗

需支持多终端系统的登陆 有商家后台、运营后台、用户app?

通过设置key名拼接前缀 避免多系统使用时发生冲突

单点登陆?

//检测指定key是否存在
exists userapp:userid:11:token

//存在就清理过期token
get userapp:userid:11:token
del userapp:token:d4s6f4asd6f4a6sd5f4a65sdf

//再次走 用户登录即可 或者 直接走不清理 毕竟也会自动过期 只是不清理占用这内存

 

主动退出 清理token?

获取后到token名直接del 用户token索引和token即可

定时过期?

务必设置key的过期时间

在token未过期时 账号基本信息变更时需及时更新token中的数据 ?

获取到token名称 再进行set即可更新该token里的值即可

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值