有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在从Redis检索数据时出现意外结果

我们使用Redis存储数据(从多个服务器获取)。这些数据存储在一个密钥上,该密钥是根据搜索到的参数准备的,我们根据准备好的密钥为数据提供服务。 现在,它可以在90%的时间内正常工作(返回预期的数据),但有时它只是不返回特定密钥的结果,尽管Redis中存在针对该密钥的数据(我通过运行keys*命令进行了验证)。 我没有在日志中观察到任何错误或异常,所以我完全不知道是什么导致了这种异常行为

由于这种情况非常不稳定,我无法解决这个问题。你知道什么问题可能会导致Redis以这种方式行事吗

PS:我根据给定的密钥异步更新数据,以便用户下次使用相同的密钥查询时获得最新的数据


共 (1) 个答案

  1. # 1 楼答案

    使用问题中的可用数据,可能是以下情况之一:

    1. 如果您的redis服务器使用主从式设置(在主服务器上写入,在从服务器上读取),主服务器和从服务器之间的网络/通信问题可能是一致性方面的真正问题。无法从主节点获取更新的从节点将返回不稳定的结果(主节点Redis节点立即回复肯定回复,即使更改尚未复制到其从节点)。如果是这种情况,我建议尝试WAIT命令。有关更多信息,请参阅Redis官方文档

    2. 一个更常见的错误(甚至在我公司的设置上)是不检查是否有“胭脂”客户连接和修改数据。如果这些客户端修改数据的速度比我们的眼睛快,那么仅仅使用KEYS不会有多大帮助。尝试在另一组机器上隔离设置,看看问题是否仍然存在。你也可以用虚拟机一个接一个地替换客户端,这样你的设置就不会那么复杂,调试起来也不会那么容易

    3. 可能是你的逻辑错误。你可能想在这里编辑你的问题或评论你对所说的键所做的确切命令。这对调试非常有帮助。您可以通过Redis或其他方法进行一些同步,以避免竞争条件或其他类似问题

    请更详细地描述您的问题,以便我们能更好地帮助您。实际的命令、客户机和服务器设置、使用的库以及Redis版本都将大有帮助