Redis超时事件定时机制
问题发现
还是那个连续鏖战一个月的项目,我发现项目上线总是会碰到各种测试环境下碰不到的坑爹问题,测试环境还是很难模拟线上的真实环境的。问题是这样,我们在项目中实现了一个定时器,是基于redis中的key超时发送通知事件给监听进程实现的,在测试环境中这样的超时机制实现是ok的,但是我们部署到线上时发现这样的定时器十分不准,人肉感觉相差分钟级别以上,这在我们的业务场景中对用户体验会有影响。
问题分析
查看redis的文档,发现了这样一句话“如果失效的主键数占抽样数的百分比大于25%,则继续抽样删除过程”,也就是说redis的超时时间不光是不准的问题,是有可能完全不准,当redis中存得key很多时,超时的key数量很容易小于总数的25%,redis的设计思路就是充分保证redis性能,完全没有考虑过过期key要及时删除的问题,结果我们用这个东西来做定时器,简直就是悲剧~
问题总结
也没啥好总结的了,就一个字“换”
redis超时事件准确度分析
组里有位大哥专门写了个脚本对redis的超时时间准确度进行了测试,最后得出的结论是随着redis中插入的key越来越多,超时事件变得越来越不准,当redis中的key达到10万时,时间差最高已经达到了967秒,15分钟了~~~