运行慢速命令时Redis不会阻塞

时间:2015-03-06 20:52:40

标签: redis

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

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

但主要的是从不同的redis-cli尝试。我们运行长时间运行的KEYS *,然后运行返回的GET命令。我们的理解是KEYS *应该阻止所有人,但GET命令继续工作。使用SLEEP命令也会发生这种情况。

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

1 个答案:

答案 0 :(得分:1)

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

  

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