【问题标题】:Redis not blocking when running slow commands运行慢命令时 Redis 不阻塞
【发布时间】:2015-03-07 07:25:38
【问题描述】:

我们的安装存在严重的配置/产品错误。我们一直在遇到与并发相关的错误,我们一直将其归咎于 Jedis 的使用,但似乎这可能是产品/配置问题。

这是一个带有超过 4M 键的单个 redis 安装。每当我们从 redis-cli 运行长时间运行的命令时,例如键 *,我们的客户端代码(基于 Jedis)开始抛出错误,例如尝试将字符串转换为二进制文件(Jedis conf 中的典型并发错误)。最糟糕的情况是,有时它似乎返回了错误的键。我们在每个 actor 实例中都使用了 Jedis 实例,所以这应该不是问题,但我们还是改为了 JedisPool。但问题依然存在(我们使用的是 Jedis 2.6.2)。

但主要是在尝试使用不同的 redis-cli 时。我们运行长时间运行的 KEYS *,然后运行返回的 GET 命令。我们的理解是 KEYS * 应该阻止所有人,但 GET 命令仍然有效。这也发生在 SLEEP 命令中。

这是否与配置设置有关,或者这是不应该发生的事情,或者 KEYS 命令没有阻止并且我的问题出在其他地方?

【问题讨论】:

    标签: redis


    【解决方案1】:

    Redis.io documentation for KEYS 明确指出KEYS 是调试命令,不应在生产中使用:

    警告:将KEYS 视为仅应在 非常小心的生产环境。它可能会破坏性能 当它针对大型数据库执行时。该命令旨在 用于调试和特殊操作,例如更改键空间 布局。不要在常规应用程序代码中使用KEYS。如果你是 寻找一种在您的键空间子集中查找键的方法,请考虑 使用SCANsets

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      相关资源
      最近更新 更多