redis过期时间失效引发的血案

场景:

一些案件分配给一些用户,利用redis的list对用户进行排队,以保证均匀性:

当一个案件来到时,pop出一个用户,将该案件分配给这个用户。然后再把这个用户put回队尾。

redis的key如:abc:18  其中18代表这个key进行加载的日志。key的有效期设置为两天。

当有案件推送到时候到这个redis key中进行查找list列表,如果list列表为空的话进行首次加载,key里的日期设置为当前日期。

症状:

数据库中已经没有了的用户出现在了这个list中

非常让人费解,每天的key都不是同一个,不可能是因为过期时间的问题啊

最终解决:

如果list中只有一个用户,或者是当并发处理的线程比较多的时候。这个list被pop空了,然后再被put回去的时候没有重新进行设置过期时间,导致key的过期时间成为了永久。到下个月18号的时候这个key中还有数据就不会从数据库中加载了。所以18的时候list里的用户列表还是上个月的

你可能感兴趣的:(redis)