2015-11-05 105 views
1

我陷入了一個小問題。我想從redis數據庫中刪除所有匹配字符串模式的哈希鍵/值對。我發現了一些針對命令行的解決方案,用於通過鍵值刪除哈希值的問題,但沒有針對通過值模式刪除的相關問題。Redis通過散列值中的模式刪除散列鍵

具體的例子:

redis> HSET myhash field1 "Wild" 
(integer) 1 
redis> HSET myhash field2 "World" 
(integer) 1 
redis> HSET myhash field2 "Window" 
(integer) 1 

現在我想刪除從myhash所有鍵/值對匹配,即FIELD1 /野,場3 /窗口,但離開場2 /世界不變的 「Wi *。」

我想這樣做在命令行上,所以這樣的事情將是巨大的:

redis-cli -n 0 KEYS someFoo* | xargs redis-cli -n 0 DEL 

當然,上述工作不是哈希值。所以最後我需要以自動方式致電

redis-cli -n 0 hdel myhash field1 
redis-cli -n 0 hdel myhash field3 

回答

2

不幸的是,我認爲唯一可以做到這一點的方法是使用HGETALL,甚至更好HSCAN

redis> HGETALL myhash 
1) "field1" 
2) "Wild" 
3) "field2" 
4) "Window" 

您在理論上導管能夠即到的東西,即使你的正則表達式和一個或多個問題HDEL與前面匹配的奇數行命令行匹配。這對我的bash技能有點幫助。也許一個lua腳本會更容易。

如果你的散列值非常大,你應該使用HSCANHGETALL會在獲取數據時阻塞。

+0

是的,謝謝,但我的CLI技能也不是很好,我真的在尋找這樣的解決方案。關於HSCAN,是的,這是一個好主意,因爲有問題的散列有幾百萬個條目。 – luksch

+0

對於這樣複雜的事情,使用任何你最喜歡的語言編寫一個小腳本可能是最容易的。 – captncraig