Redis删除除了以#开头的键以外的所有键

时间:2015-11-06 07:27:19

标签: redis

我的redis集合包含许多键

我希望能够将它们全部清除,除了所有以:

开头的键
  

"配置::"

这可能吗?

3 个答案:

答案 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脚本(并且它会让你的应用程序看到它是一个单一的命令),但它仍然是同样的方法。罩。