您的位置:首页 > 数据库 > Redis

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

2019-05-12 15:07 706 查看
版权声明:阅读优秀源码,宛若一场探索未知的旅行,疑惑处惊奇,优雅处旖旎; 一切都是新奇的,千回百转与大师的心灵触碰,一场跨越时空的对话,涤荡了原有的愚昧,蜕变出更好的自己。 https://blog.csdn.net/FENGQIYUNRAN/article/details/90140529

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

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

按照,流程图首先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查询校验严谨性进行解决都可以,双方面进行解决最好。

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: