redis中token失效引发的一次生产事故

 更新时间:2024年03月25日 14:59:26   作者:搬山道猿  
项目再测试的时候发现不定时token失效,本文主要介绍了redis中token失效引发的一次生产事故,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

问题描述:

发版后回归测试,不定时出现token失效,导致自动退出到登录界面。

如果操作的人员较多,token失效的就比较快,操作的人员较少token失效的相对较慢。

问题复现:

同一账号多人操作:很快就会出现token失效

不同账号多人操作:很快就会出现token失效

单个账号操作:较长时间出现token失效

问题排查:

检查和token相关的一系列配置,查看是否配置问题

  • token的有效时长:设置的是48小时-----正常
  • 是否允许多个登录:设置允许多方登录-----正常

token是存储于redis缓存中的,重新登录,检查生成的token是否正常存储于redis。redis中新生成的token的过期时间是48小时左右,所以可以排除自身到期淘汰的原因。

让开发人员检查代码中是否有token相关的操作。

都不是这些原因,所有能想到的都已经排除了,真的头大。

再次让业务人员一起操作,然后我也登录,记录自己的token ,redis中token信息一切正常,再次退出登录的时候发现redis中这个token也消失了。

这时候可以确定 是redis中的token丢失而导致失效,从而退出登录。

至于为什么会丢失,还是没有头绪。

确认原因

然后问了下运维同事,帮忙看看redis有什么特殊的情况,这一看就有结果了:redis内存基本快满了,而且没有做预警,大家都不知道。

查了下有什么大key或者热key占用了这么多的内存

发现系统中另一个服务占用了redis极大的内存,如下

这个服务是公司基础架构的服务,里面的功能日志是通过redis模式传输的,然后在读取redis落库以达到异步解耦。落库成功就会删除redis, 而且有个定时任务负责落库,删除redis。而我们因为不了解细节 没有启用这个定时任务(也可以说压根不知道这玩意的存在),才导致了这个结果。

为什么就不能设置一个过期时间呢,为什么!

直接让运维同事删除这些缓存,然后多人操作系统 再试试是否会出现token失效,结果是一切正常,也不会退出登录了。

为什么

redis内存不足,为什么会删除我的数据而不是报写入错误呢

这个就和redis的内存淘汰策略有关了, redis默认的淘汰策略是noeviction 不淘汰数据,新增或者修改操作抛异常,而我们的环境设置的是volatile-lru

redis是内存工具,所以在内存快要用完的时候,怎么去取舍已存入的数据和即将要存入的数据,redis官方提供了8种淘汰策略,配置是maxmemory-policy 。

所有的策略如下

  • volatile-lru:在设置过期时间的数据中淘汰最少使用的数据。

  • allkeys-lru:在所有的数据中淘汰最少使用的数据。

  • volatile-lfu:在设置过期时间的数据中淘汰使用频率最低的数据。

  • allkeys-lfu:在所有的数据中淘汰使用使用频率最低的数据。

  • volatile-random:在设置过期时间的数据中淘汰任意随机数据。

  • allkeys-random:在所有的数据中随机淘汰数据。

  • volatile-ttl:在设置过期时间的数据中淘汰最早过期的数据。

  • noeviction:默认策略,不淘汰数据,新增或者修改数据会抛异常,但是读操作正常进行,不受影响

所以对于redis的使用需要小心,避免写入没有过期时间的数据!即使一定要存入永久数据,也要预估数据的大小,判断是否会随着时间不断增加!增加内存监控,设置报警阈值,提前发现问题。

到此这篇关于redis中token失效引发的一次生产事故的文章就介绍到这了,更多相关redis token失效内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • 详解redis desktop manager安装及连接方式

    详解redis desktop manager安装及连接方式

    这篇文章主要介绍了redis desktop manager安装及连接方式,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • Redis Cluster集群主从切换的踩坑与填坑

    Redis Cluster集群主从切换的踩坑与填坑

    这篇文章主要介绍了Redis Cluster集群主从切换的踩坑与填坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Redis分布式锁存在的问题(推荐)

    Redis分布式锁存在的问题(推荐)

    有很多基于Redis实现的分布式锁方案或者库,但是有些库并没有解决分布式环境下的一些问题陷阱,这篇文章主要介绍了Redis分布式锁存在的问题,需要的朋友可以参考下
    2022-12-12
  • Redis结合Lua脚本实现分布式锁详解

    Redis结合Lua脚本实现分布式锁详解

    Lua?是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,?本文主要为大家介绍了Redis如何结合Lua脚本实现分布式锁,需要的可以参考下
    2024-02-02
  • 深入浅析Redis 集群伸缩原理

    深入浅析Redis 集群伸缩原理

    Redis 集群提供了灵活的节点扩容和收缩方案。在不影响集群对外服务的情况下,可以为集群添加节点进行扩容,也可以下线部分节点进行缩容,接下来通过本文给大家分享Redis 集群伸缩原理,感兴趣的朋友一起看看吧
    2021-05-05
  • Redis中Scan命令的基本使用教程

    Redis中Scan命令的基本使用教程

    这篇文章主要给大家介绍了关于Redis中Scan命令的基本使用教程,文中通过示例代码介绍的非常详细,对大家学习或者使用Redis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • Redis数据库的数据倾斜详解

    Redis数据库的数据倾斜详解

    Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,需要的朋友可以参考下
    2023-07-07
  • Redis全文搜索教程之创建索引并关联源数据的教程

    Redis全文搜索教程之创建索引并关联源数据的教程

    RediSearch提供了一种简单快速的方法对 hash 或者 json 类型数据的任何字段建立二级索引,然后就可以对被索引的 hash 或者 json 类型数据字段进行搜索和聚合操作,这篇文章主要介绍了Redis全文搜索教程之创建索引并关联源数据,需要的朋友可以参考下
    2023-12-12
  • redis缓存与数据库一致性的问题及解决

    redis缓存与数据库一致性的问题及解决

    这篇文章主要介绍了redis缓存与数据库一致性的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 利用yum安装Redis的方法详解

    利用yum安装Redis的方法详解

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。这篇文章主要介绍的是利用yum安装Redis的方法,有需要的朋友们可以参考借鉴,下面来一起看看吧
    2016-11-11

最新评论

?


http://www.vxiaotou.com