2016-04-28 56 views
0

我有一個幾百萬個鍵的redis數據庫。有時我需要通過模式查詢關鍵字,例如2016-04-28:*我爲此使用scan。第一個電話應該是redis掃描返回空結果,但非零遊標

scan 0 match 2016-04-28:* 

然後它會返回一堆鍵和下一個光標或0,如果搜索完成。

但是,如果我運行查詢並且沒有匹配的鍵,scan仍然返回非零遊標,但是返回一組空的鍵。這種情況不斷髮生在每個連續的查詢上,所以搜索似乎並沒有結束很長時間。

Redis的文檔說

SCAN家庭功能不保證每次調用返回的元素的數量是在給定的範圍內。 該命令還允許返回零元素,並且只要返回的遊標不爲零,客戶端就不應該考慮迭代完成。

所以我不能停下來,當我得到空套按鍵。

有沒有一種方法可以加快速度?

回答

7

您將始終需要完成掃描(即獲取遊標== 0)以確保沒有匹配。但是,您可以使用COUNT option來減少迭代次數。 10的默認值是很快的如果這是你的匹配模式的一個常見場景 - 開始增加它(例如,double或者2的冪數,但是爲了以防萬一),使得Redis「搜索更難」鍵。通過這樣做,您可以節省網絡往返時間,以便「加快速度」。