我们的安装存在严重的配置/产品错误。我们一直在遇到与并发相关的错误,我们一直把它归咎于Jedis的使用,但似乎它可能是产品/配置问题。
这是一个拥有超过4M密钥的redis安装。每当我们从redis-cli运行一个长时间运行的命令时,就像一个键*,我们的客户端代码(基于Jedis)开始抛出错误,比如尝试将字符串转换为二进制文件(Jedis conf中的典型并发错误)。最糟糕的情况是,有时似乎它返回了错误的密钥。我们在每个actor实例中都使用了一个Jedis实例,所以它应该不是问题,但我们改为JedisPool。但问题仍然存在(我们正在使用Jedis 2.6.2)。
但主要的是从不同的redis-cli尝试。我们运行长时间运行的KEYS *,然后运行返回的GET命令。我们的理解是KEYS *应该阻止所有人,但GET命令继续工作。使用SLEEP命令也会发生这种情况。
这是否与配置设置相关或者这是不应该发生的事情,或者KEYS命令没有阻塞而我的问题出在其他地方?
答案 0 :(得分:1)
Redis.io documentation for KEYS
明确指出KEYS
是一个调试命令,不应该在生产中使用:
警告:将KEYS视为仅应在其中使用的命令 生产环境非常谨慎。它可能会破坏性能 当它针对大型数据库执行时。这个命令是有意的 用于调试和特殊操作,例如更改密钥空间 布局。不要在常规应用程序代码中使用KEYS。如果你是 想一想在键空间的子集中查找键的方法,请考虑 使用SCAN或sets。