2016-05-27 25 views
0

我想列出與特定模式鍵象下面這樣:如何在REDIS中列出沒有序列號的密鑰?

KEYS "*Team*" 

和我得到的結果集序列號如下圖所示:

1)「TeamMetricSummary_google_bps_app_google wfep league_chambersc2016:04-03- 2016_06-04-2016"

2) 「\ XAC \固定的\ X00 \ x05t \ x00TTeamMetricSummary_google_bps_app_google wfep league_malini.gto:12-06-2015_04-02-2016」

我的問題是我想避免在結果集中的序列號。

這可能嗎?

回答

1

這是不可能的。 Redis將返回整個密鑰。您可以在應用程序邏輯中使用正則表達式或字符串操作(如split)來實現此目的。爲此,你必須知道你的輸入。例如,如果你的鑰匙是像xTeamNamey這樣的模式。其中x和y是您想避免的某些約束(序列號),您可以插入您的密鑰,如x:TeamName:y。在檢索中,您可以使用string.split(":")[1]來獲取TeamName。

0

回答您的具體問題
Redis支持Lua腳本。如果您使用的是捆綁了Lua版本5.0或更高版本的Redis版本,則您的Lua腳本可以使用regular expressions。寫一個redis.callKEYS命令的Lua腳本,然後進行模式匹配以刪除您的序列號。

替代
順便說一句,上述假設是,在生產運行,這裏是我的建議軟件部分:不要在生產中使用KEYS命令!如it's documentation所述,Redis必須通過所有密鑰才能獲得與您的模式匹配的密鑰。或者,您可能會考慮將影子寫入到Redis set,每當您添加一個關鍵碼時,它都會被修剪爲序列號。當你需要密鑰列表時,你可以閱讀整個集合。但是,您必須手動處理密鑰的到期。

+1

'KEYS'的另一種替代方法是使用'SCAN'。在v3.2及以上版本中,它也可以從Lua腳本中使用。 –