从许多博客中,我了解到redis命令keys *
可能阻塞redis服务器,并且其它命令不能按时执行。
但是,今天我在我的数据库上运行了keys *
,它有大约800万数据。然后我用我的另一个客户端执行其他命令,如get
或set
,这一切都工作得很好,并及时给予响应。
所以,我很困惑为什么我的命令keys
不阻塞。
图片是https://i.stack.imgur.com/8flt4.png
从许多博客中,我了解到redis命令keys *
可能阻塞redis服务器,并且其它命令不能按时执行。
但是,今天我在我的数据库上运行了keys *
,它有大约800万数据。然后我用我的另一个客户端执行其他命令,如get
或set
,这一切都工作得很好,并及时给予响应。
所以,我很困惑为什么我的命令keys
不阻塞。
图片是https://i.stack.imgur.com/8flt4.png
2条答案
按热度按时间pzfprimi1#
KEYS
( 和 几乎 任何 其他 Redis 命令 ) * * 是 * * 阻塞 , 不要 被 愚弄 : )当 Redis 扫描 内部 字典 并 组装 响应 时 , 它 会 被 阻塞 。 但是 , 当 响应 准备 好 并 被 移动 到 网络 层 后 , 服务 器 就 可以 自由 地 处理 下 一 个 操作 了 。 与 此 同时 , 客户 端 从 发送
KEYS
开始 直到 收到 整个 响应 都 被 阻塞 。9cbw7uwe2#
关于阻塞命令的有趣事实是,它们并不阻塞整个服务器,而只是阻塞调用它们的客户端。https://redis.io/docs/reference/modules/modules-blocking-ops/