2014-04-25 55 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命令從永遠不應運行的服務器。 –