可能的redis数据损坏错误

时间:2015-12-10 19:28:43

标签: redis jedis

我看到redis中发生了数据问题,我想知道我的诊断是否正确。基本上当我对服务器进行大量写入并使用Jedis客户端进行读取时,我看到超时后跟get()操作返回的数据不正确 - 数据有意义但是它对于不同的关键。

以下是我的想法:

  1. 掌握了大量的写入负载
  2. Slave做了周期性的bgsave
  3. Slave试图赶上主人,但它已经落后了所以它完全重新同步
  4. 为了完全重新同步,master在处理大量读写操作时会执行10GB +数据集的bgsave
  5. 在数据从服务器返回之前,Jedis客户端get()调用超时
  6. 在同一客户端上完成的下一个get()调用会读取为响应超时的数据而写入的数据(因为它在超时后但在下一次调用之前实际到达套接字缓冲区)
  7. 从现在开始,每次get()调用都会返回前一个调用的数据
  8. 我的解决方案似乎有效,每次抛出超时异常时都会关闭并重新打开连接。

    对于我所看到的内容,这似乎是一个合理的解释吗?

1 个答案:

答案 0 :(得分:2)

你所描述的不是Redis bug,而是Jedis,因为偏移读取将在客户端发生。

在这种情况下,在超时时重新连接的解决方法是合理的,应该可行。我还建议将其作为bug提交给Jedis。