我的redis集合包含许多键
我希望能够将它们全部清除,除了所有以:
开头的键"配置::"
这可能吗?
答案 0 :(得分:5)
你可以这样做
redis-cli KEYS "*" | grep -v "configurations::" | xargs redis-cli DEL
将所有密钥列入redis,从列表中删除包含" configurations ::"并从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)
答案 1 :(得分:1)
SCAN
& DEL
方法(由@khanou提出)是最好的临时解决方案。或者,您可以使用Redis Set保留所有configurations::
个键名的索引(只要您创建新的SADD
键,只需configurations::
键的名称即可。完成此设置后,您可SSCAN
更有效地获取所有相关的关键名称(不管您SREM
,都不要忘记DEL
。
答案 2 :(得分:0)
是的,这是可能的。枚举所有密钥,评估每个密钥并删除它是否符合删除标准。
如果这是您要求的,则没有内置的redis命令。
也许可以制作一个可以做到这一点的Lua脚本(并且它会让你的应用程序看到它是一个单一的命令),但它仍然是同样的方法。罩。