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查询校验严谨性进行解决都可以,双方面进行解决最好。
相关文章推荐
- Redis与spring整合缓存的业务场景使用方法二(使用注解@Cacheable@CacheEvict)
- C#使用Redis做缓存遇到的坑处理方案
- 利用redis做业务缓存和配置项
- Redis缓存业务实践
- Redis与spring整合缓存的业务场景使用方法一
- 项目中遇到的Redis缓存问题及面试问题总结
- Redis无侵入式地缓存业务查询数据
- 使用Spring Data Redis实现缓存遇到的一些问题
- 【Redis】redis实战:在业务中添加缓存机制
- springboot项目使用redis数据库作缓存
- C# Azure 分布式缓存Redis的新建与配置
- REDIS缓存技术
- 使用redis做为MySQL的缓存
- 初学Redis(2)——用Redis作为Mysql数据库的缓存
- Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群
- 【Redis缓存机制】10.主从模式
- 在windows下面配置redis集群遇到的一些坑
- Spring boot配合Spring session(redis)遇到的错误
- 使用Redis事件通知实现各类定时业务(优惠券过期,自动收货、评价等)
- 整合SpringBoot+Mysql+Redis实现缓存机制的一个Demo