为何不可使用Redis的KEYS命令
在Redis KEYS命令的文档中,有如下一句话:
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.
简而言之,KEYS
命令性能很差,尽量不要在生产环境中使用。
不过官方文档也提到了,可以使用SCAN
命令
那么,KEYS命令为什么性能差呢?
从server.c中可以看到,KEYS命令被keysCommand函数处理
1 | void keysCommand(client *c) { |
db本来就是一个dict,所以直接拿到一个dictIterator di
,然后依次遍历,整个KEYS
操作的复杂度是O(n)
,n为redis中key的数量。
这个操作,会阻塞到redis进程的。
可以看到,redis对于KEYS *
这种情况做了优化。如果pattern是*,那么直接遍历,而不用判断是否match
为何不可使用Redis的KEYS命令
https://robberphex.com/why-cant-use-keys-command-at-redis/