redis - 为什么我的 redis 命令键不会阻止我的其他操作
问题描述
从很多博客,我了解到redis命令keys *
可能会阻塞redis服务器,其他命令不能按时执行。
但是,今天我keys *
在我的数据库上运行它,它有大约 800 万个数据。然后我使用我的其他客户端执行其他命令,例如get
or set
,这一切都很好,并按时给出响应。
所以,我很困惑为什么我的命令keys
没有阻止。
解决方案
KEYS
(以及几乎所有其他 Redis 命令)正在阻塞,不要被愚弄:)
当 Redis 扫描其内部字典并组装响应时,它被阻止了。但是,在响应准备好并移动到网络层后,服务器可以自由处理接下来的操作。同时,您的客户端从发送KEYS
到收到整个响应都被阻止。