2012-01-05 108 views
10

我已經使用分號保存了數據。使用通配符查找密鑰

redis> keys party:* 

1) "party:congress:president" 
2) "party:bjp:president" 
3) "party:bjp" 
4) "party:sena" 

是否有任何命令將列出所有各方?在上例的情況下,我期望

congress 
bjp 
sena 
+1

你必須保持單獨的列表,其不貴 – 2012-01-09 02:02:32

回答

18

不,沒有命令來做到這一點。 但如果你真的必須在客戶端實現它,那將是微不足道的。

應用程序不應該使用KEYS命令來檢索數據。當它正在線性掃描你存儲的數百萬個密鑰時,KEYS會阻止整個Redis實例。這更多是一個應該用於管理工具的調試命令。

隨着Redis的,不存在B樹結構來索引鍵,這樣你就不能查詢鍵,除非你的密鑰存儲在現有集合中(集合,zset,等...)

+0

我看到[這個答案](http://stackoverflow.com/a/30490869/1041046)可以通過部分密鑰進行搜索。由於我剛剛瞭解Redis,我不確定它有多準確。我想你可能需要更新你的答案以包含更多細節。 – AaA 2016-10-18 06:19:11

+0

可以通過部分關鍵字進行搜索,除非您明確地爲此創建數據結構,否則不可能通過部分關鍵字進行有效搜索。此外,這裏的原始問題不是關於搜索,而是關於結果的操縱(這在客戶端更好)。 – 2016-10-18 08:04:50

+0

好點,我正在尋找部分關鍵的搜索,這是谷歌的第二個結果。 – AaA 2016-10-18 09:59:04

1

我想如果你想從redis獲得'派對'的數據,那麼每當你保存你的常規數據時,你也可以將派對名稱保存到派對列表中,然後你可以很容易地獲得它

4

你可以在redis中使用SCAN命令搜索密鑰而不會阻塞整個數據庫。

redis SCAN docs

這個命令有一個可選的過濾器匹配的作品很像上的按鍵命令過濾器。

redis> SCAN 0 MATCH party:* 

1) <the cursor> 
2) 1) "party:congress:president" 
    2) "party:bjp:president" 
    3) "party:bjp" 
    4) "party:sena" 

保持通話,直到光標返回到0獲得各方 (可能無法得到,如果當您在掃描他們被插入的所有各方)

可用自2.8