程序的逻辑是这样的: 有一个定时任务在执行前会判断 redis 中是否存在数据,如果存在则不执行,如果不存在继续执行,然后在 Redis 中新增数据并且把定时任务间隔时间作为数据的过期时间。
正常情况下,下一次任务执行前 Redis 中一定是没有数据的,但是实际上任务第二次执行的时候 Redis 中的数据总是不为空,后续大部分情况都是正常的,偶尔也会有不为空的。
Redis 扫描过期数据的间隔是 50ms ,也尝试过 timeout = timeout-50 ,也不行!!!
想问下有没有遇到过类似情况的大佬,麻烦指点下!!!
start 是任务开始时的时间戳,timeout 是计算出来的任务间隔时间,也是 redis 的过期时间
start: 1662520720050 timeout: 4950 foo task execute -- 正常执行
start: 1662520725006 timeout: 4994 redis not empty -- 这里第二次总是不为空
start: 1662520730013 timeout: 4987 foo task execute
start: 1662520735004 timeout: 4996 foo task execute
start: 1662520740001 timeout: 4999 foo task execute
start: 1662520745010 timeout: 4989 foo task execute
start: 1662520750005 timeout: 4995 foo task execute
start: 1662520755004 timeout: 4996 foo task execute
start: 1662520760015 timeout: 4985 foo task execute