Skip to content

记一次 Redis 缓存写入问题调查

🏷️ Redis

线上测试服务器某个接口一直报错。通过添加写 log 代码,发现是 Redis 缓存始终写不进去导致的,而别的接口却可以正常写入。

反复检查了 SVN 的 Commit 记录、前后的代码及配置有没有改动,没有发现任何问题。

最终发现接口有一句代码设置了 Redis 的TimeOut时间为 5 分钟,如果不设置的话默认取 HttpSession 的超时时间(20 分钟)。

把这句代码注释后果然问题就解决了。

但问题的根源并不在这里,因为线下及线上正式服都是好的。

后来灵光一现,想是不是 IIS 服务器和 Redis 服务器的系统时间有差异导致的。一检查,果然,时间差了 5 分多钟。

通过这个问题说明:设置 Redis 的超时时间时,是发送了一个时间戳过去的,而不是 5 分钟这个 TimeOut 数值。

设置时采用了 IIS 服务器的时间,到了 Redis 服务器上时,Redis 发现该 Key 已超时,直接就将该 key 删除了。

唉!浪费了两个小时啊!