当您在 Redis 数据库中运行 KEYS *
命令时,Redis 将锁定数据库,直到 key 返回所有 key 。
我想在 Redis 中创建 2 个单独的数据库并在每个数据库中创建一些 key ,然后选择其中一个并在该数据库上运行 keys 命令。
Redis 会锁定所有可用的数据库直到回答准备好还是只锁定选定的数据库?
最佳答案
TL;DR:是的。
Redis 不会锁定 - 它会阻塞(几乎1)所有命令,因为它是单线程的。当服务器执行命令时,无论是简单的 GET
还是邪恶的 KEYS
,它都会忙于提供服务而不会做任何其他事情。命令完成所需的时间越长,服务器被阻塞的时间就越长。
KEYS
是一个长时间运行的命令,因为它总是遍历整个键空间(不管模式如何),更不用说它做出的潜在巨大回复。
同样的单线程执行也处理编号的,也就是共享的数据库。您对其中一个数据库执行的任何操作都会阻塞整个服务器,包括所有数据库。更多信息请访问:https://redislabs.com/blog/benchmark-shared-vs-dedicated-redis-instances/
关于redis - 当您在特定数据库上运行 `KEYS` 命令时,Redis 会锁定所有可用数据库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42387536/