2014-04-25 24 views
1

我不认为这有一个答案,但我希望有一些东西在那里。 在制作中,使用KEYS是一种不好的做法,因为它会扫描所有记录(O(n))。 如果有非常多的按键,那可能会损害性能。Redis - 安全地检索生产数据库中的一小组密钥

假设数据库中有大量的密钥,是否有任何安全的方法来获取这些密钥中的几个?例如,如果我只是想看一张唱片,而我并不在乎我得到什么。

我明白这是更多的设计问题(例如使用select,use sets),并且我永远不需要运行键,除非我知道数据库中没有大量的数据。动机更多的是保持谨慎,所以我不会在某天运行密钥并杀死分贝,因为我处于与我想不同的数据库中

+0

你应该很好地在控制台上运行'keys',甚至在生产分贝上。我认为警告更多的是你不想编写代码,这取决于'keys'方法。 – bgschiller

+1

@bgschiller - nope,即使在控制台KEYS中也是危险的。原因是由于Redis(大部分)是单线程的,因此运行长时间运行的命令(例如KEYS)可能会导致DoS。 –

回答

2

推荐的方法(自2.8版起)将使用SCAN命令(和兄弟姐妹)代替。 SCAN基本上允许你用游标遍历你的密钥空间,所以你不会阻止其他操作。

+0

要解决意外运行的KEYS,请使用Redis的配置文件中的rename命令选项来重命名或删除(通过重命名为空字符串)KEYS命令从永远不应运行的服务器。 –