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

标签 redis

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

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

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

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

最佳答案

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

Warning: consider KEYS as a command that should only be used in production environments with extreme care. It may ruin performance when it is executed against large databases. This command is intended for debugging and special operations, such as changing your keyspace layout. Don't use KEYS in your regular application code. If you're looking for a way to find keys in a subset of your keyspace, consider using SCAN or sets.

关于Redis 在运行慢速命令时不会阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28907442/

相关文章:

redis - Stunnel 证书验证失败

linux - 如何在与 ubuntu 中默认端口 6379 不同的端口上启动 redis-server

redis - 如何在 Redis 中保存和检索带有重音符号的字符串?

php - 创建一个 redis 监听器 - 在 php 中可能吗?

node.js - 等待数据在数据库中出现/更改

mongodb - 为什么在什么场景下使用 REST 更好? NoSQL

docker - docker swarm 中的 Redis 哨兵故障转移配置

redis - sails-redis:增加属性值

c# - 我试图获取有关 redis 队列的信息,如 used_memory

ruby-on-rails - 运行 Rails + Sidekiq 的 2 台服务器使用相同的 redis 服务器会导致意外行为吗?