【问题标题】:Why does redis-py's bgsave() command return False after successful execution?为什么redis-py的bgsave()命令执行成功后返回False?
【发布时间】:2013-01-20 05:05:26
【问题描述】:

当我触发 redis-py 的bgsave() 命令时,返回值为False,但我很确定执行成功,因为我已经检查过lastsave()

但是,如果我使用save(),成功执行后返回值将是True

谁能解释一下Falsebgsave() 的含义?不确定它是否与 bgsave() 在后台执行有关。

【问题讨论】:

  • False 表示 redis-py 收到的响应不是“后台保存已启动”。尝试使用 redis-cli 发出 BGSAVE,看看 redis 的响应是什么。
  • @PavelAnossov 在 redis-cli 中运行 BGSAVE 会正确显示“后台保存已启动”。
  • 然后编辑您的redis/client.py,在parse_response 方法中的response = connection.read_response() 之后添加print response(第372 行)。当您在那里时,请查看 RESPONSE_CALLBACKS 字典(第 221 行)。查看它是否确实期望“后台保存已启动”以响应 bgsave。如果不是,那么你的 redis 和 redis-py 版本不匹配。
  • 看起来 lambda 应该是 nativestr(r) == 'Background saving started' 并且您在 redis-py 中发现了一个错误。
  • @PavelAnossov 是的~你很快!我只是在 github 上发送一个拉取请求。非常感谢您将我指向 client.py 的代码。干杯!

标签: python redis


【解决方案1】:

感谢 Pavel Anossov,在阅读了 client.py 的代码后,我发现来自 2 个命令(BGSAVE 和 BGREWRITEAOF)的响应没有从字节转换为 str,这导致了 Python 3 中的问题。

要解决此问题,只需将RESPONSE_CALLBACKS 中的这两个命令的lambda r: r == 更改为lambda r: nativestr(r) ==

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 2022-11-20
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    相关资源
    最近更新 更多