2015-11-06 64 views

回答

4

你可以做到這一點

redis-cli KEYS "*" | grep -v "configurations::" | xargs redis-cli DEL 

列出所有鍵進入Redis的,從包含列表中刪除鍵「配置::」,並從Redis的

編輯 作爲@Sergio Tulentsev刪除注意它的鑰匙不適用於生產。我使用這個python腳本刪除產品redis上的密鑰。在調用腳本之前,我從主服務器複製到從服務器。

#!/usr/bin/env python 
import redis 
import time 

pattern = "yourpattern*" 

poolSlave = redis.ConnectionPool(host='yourslavehost', port=6379, db=0) 
redisSlave = redis.Redis(connection_pool=poolSlave) 

poolMaster = redis.ConnectionPool(host='yourmasterhost', port=6379, db=0) 
redisMaster = redis.Redis(connection_pool=poolMaster) 


cursor = '0' 
while cursor != 0: 
     cursor, data = redisSlave.scan(cursor, pattern, 1000) 
     print "cursor: "+str(cursor) 
     for key in data: 
       redisMaster.delete(key) 
       print "delete key: "+key 
     # reduce call per second on production server 
     time.sleep(1) 
+2

用法是氣餒,反而是,可以在緊要關頭使用。 –

+0

你是對的@SergioTulentsev,如果在生產中你可以用生產中的redis轉儲裝載其他redis。您執行轉儲上的Keys *並在主服務器上執行刪除。 – khanou

0

是的,這是可能的。枚舉所有的鍵,評估每個鍵,並刪除它是否符合刪除標準。

沒有內置Redis的這個命令,如果這是你在問什麼。

可能可以煮了一個Lua腳本,將做到這一點(它會期待您的應用程序,它是一個命令),但仍然是在引擎蓋下同樣的方法。

1

SCAN & DEL方法(如提出@khanou)是最好的臨時解決方案。或者,你可以保留所有的configurations::鍵名的索引與Redis的設置(只需SADD密鑰的名字給它當你創建一個新的configurations::鍵)。一旦你有了這一套,你可以SSCAN它更有效地獲得所有相關的鍵名(不要從它忘記SREM每當你DEL雖然)。按鍵