Redis明明存在值,为什么有时候取不到?

redis存了某个应用的token,属于是一个热key,调用的频率估计每分钟30次左右;
大部分的时间是能够读取到值的,但是有时候会连着读取不到。
想问一下 大佬们该从哪些角度去排查问题。
命中率在 98.08% 左右
redis信息
Redis明明存在值,为什么有时候取不到?

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 29

如果确认 key 一直存在但是「取不到数据」的话,可以从两个方面来定位:一是「取没取」,二是「动没动」。

「取没取」可以通过 monitor 命令定位跟踪下,之前写过一篇文章《Redis 实用小技巧——谁动了我的 Redis ?》,可参考下思路。这一步可以排除程序有没有成功请求到 Redis 。

如果第一步没有问题的话,那就看一下「动没动」的问题:即取到的数据有没有经过「过滤层」被过滤掉,这种情况可以根据系统日志进行定位。

抛开以上两个方向,一般概率性的问题,可以考虑请求是否由不同的客户端发起:从服务端角度分析,这一点从 monitor 上可以判断出来。从客户端角度分析,看下有没有使用负载,多进程等,客户端信息存在不同步的情况。

9个月前 评论
寞小陌 (楼主) 9个月前

laravel 几? 以及是否有用 laravel-s 加速?

9个月前 评论

排除角度就是你用的是 php-redis 还是 predis, 可以换成另一个(呼唤下),试试效果

9个月前 评论
寞小陌 (楼主) 9个月前
陈先生
  1. 使用频率是 30次/m,更新频次呢?
  2. 有没有做对应的曲线来查看在何时取不到数据以及数据在何时消失的?
  3. 有没有看 redis 的日志或者 AOF 文件来确认是否读取时已被删除?
9个月前 评论
寞小陌 (楼主) 9个月前
寞小陌 (楼主) 9个月前

是不是 set 的时候设置了过期时间,然后过期了。

也有可能是网络链接问题,我之前做过 Command 里面监听 redis 发布订阅, 然后时间长了 redis 链接超时的问题。 那个问题的表现就是收不到消息了, 后来发现是 redis 链接超时了。 博客:解决 laravel-sail 环境下, redis subscribe 运行一段时间后报错的问...

9个月前 评论
寞小陌 (楼主) 9个月前
sanders

可以试试用 redis 客户端登录后使用 monitor 命令看看命令被执行的过程。

9个月前 评论

好奇是中间取不到 过了一会又能取到 还是说一直就取不到了

9个月前 评论
寞小陌 (楼主) 9个月前
kolin (作者) 9个月前
寞小陌 (楼主) 9个月前
kolin (作者) 9个月前

合理猜测是key过期了就取不到,后面又取得到那是过期后又设置了一次。推荐检测过期时间设置是否合理

9个月前 评论
寞小陌 (楼主) 9个月前
deatil (作者) 9个月前

如果确认 key 一直存在但是「取不到数据」的话,可以从两个方面来定位:一是「取没取」,二是「动没动」。

「取没取」可以通过 monitor 命令定位跟踪下,之前写过一篇文章《Redis 实用小技巧——谁动了我的 Redis ?》,可参考下思路。这一步可以排除程序有没有成功请求到 Redis 。

如果第一步没有问题的话,那就看一下「动没动」的问题:即取到的数据有没有经过「过滤层」被过滤掉,这种情况可以根据系统日志进行定位。

抛开以上两个方向,一般概率性的问题,可以考虑请求是否由不同的客户端发起:从服务端角度分析,这一点从 monitor 上可以判断出来。从客户端角度分析,看下有没有使用负载,多进程等,客户端信息存在不同步的情况。

9个月前 评论
寞小陌 (楼主) 9个月前

monitor 监控一下redis

9个月前 评论

检查redis连接池和redis key的命中率

9个月前 评论
Junwind

有没有一种情况,瞬间并发大的情况,redis 连接数过多,或redis负载高,阻塞了,取不到; 等负载下降了,又取到了。

9个月前 评论
寞小陌 (楼主) 9个月前
李铭昕

说一下存取的命令,还有redis的基本情况。

比如 Redis 是集群么?连接的事代理么?读取时是否使用了 mget 批量读取?

9个月前 评论
寞小陌 (楼主) 9个月前

可以预埋一个无用的 key,当取不到 token 时去读取 key

9个月前 评论
寞小陌 (楼主) 9个月前

命中率在98.08%左右,但还是有时候查不到数据

8个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!