今天线上的一个短视频突然无法播放也无法查看详情了,而且目前反映也只有这一个,那么是什么原因,开始展开排查。

首先分析下这个短视频观看拉取数据的流程图:

Redis在业务中作缓存遇到的坑

按照,流程图首先hgetall 查看详情如下:

*.aliyuncs.com:6379> hgetall video:1157

1) "view_count"

2) "1"

发现redis的详情中只有view_count一个field,进一步查看当redis没有数据的时候,是否正确读取了mysql数据,仔细check下逻辑发现,只有不存在key video:1157时才会去mysql读取,但是,此时是有key的,所以没有回溯到mysql的。那么,可以猜测到,一定是在用户看到视频后上报观看量时通过hincrby产生的,而且在这之前key已经被删除了。整个系统正常只有后台编辑时才会删除key。但是正常情况,即时已经删除了key,在播放视频的时候也会从mysql查找并同步到redis。再仔细想想,就只剩下一个场景可以解释:首先,用户拉刚取了视频(还没来得及上报),此时后台恰好编辑完毕,紧接着观看视频上报,于是就产生了上述情况。虽然,这种情况看起来不太可能经常发生,但理论上明显是可以的。

 

分析到了问题的原因,做解决方案就简单了,从后台更新机制;api查询校验严谨性进行解决都可以,双方面进行解决最好。

 

相关文章:

  • 2021-09-14
  • 2022-01-01
  • 2021-05-09
  • 2021-05-31
  • 2022-12-23
  • 2021-09-29
猜你喜欢
  • 2021-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-04-20
相关资源
相似解决方案