由于早期的存量4.0版本实例中,布隆过滤器相关API处于未正式开放的状态,后续的大版本实例中已取消支持,因此在实例升级之前,建议先排查并删除Bloom类型数据。
Python3
复制代码至可连接实例的设备上,命名为bloom_find.py。
import sys
import redis
def main(argv):
if len(argv) < 3:
print("Usage: python bloom_find.py host port password")
sys.exit(-1)
host = argv[1]
port = argv[2]
password = argv[3]
print("host: %s, port: %s, password: %s\n" % (host, port, password))
for i in range(256):
redis_cli = redis.StrictRedis(host=host, port=port, password=password, db=i)
cursor = 0
print("Start scanning db %d" % i)
while True:
cursor, keys = redis_cli.scan(cursor=cursor, count=1000)
if keys:
for key in keys:
key_type = redis_cli.type(key).decode()
if key_type == "unknown":
print("Found unknown type key(maybe bloom): %s in db %d" % (key.decode(), i))
if cursor == 0:
break
if __name__ == '__main__':
main(sys.argv)
执行命令安装redis-py:pip install redis。
执行脚本检测是否存在Bloom类型数据:python bloom_find.py <host> <port> <password>。
控制台日志若打印存在Bloom类型数据,可使用UNLINK命令删除。
Python2
复制代码至可连接实例的设备上,命名为bloom_find.py。
import sys
import redis
def main(argv):
if len(argv) < 3:
print("Usage: python bloom_find.py host port password")
sys.exit(-1)
host = argv[1]
port = argv[2]
password = argv[3]
print("host: %s, port: %s, password: %s\n" % (host, port, password))
for i in range(256):
redis_cli = redis.StrictRedis(host=host, port=port, password=password, db=i)
cursor = 0
print("Start scanning db %d" % i)
while True:
cursor, keys = redis_cli.scan(cursor=cursor, count=1000)
if keys:
for key in keys:
key_type = redis_cli.type(key)
if key_type == "unknown":
print("Found unknown type key(maybe bloom): %s in db %d" % (key, i))
if cursor == 0:
break
if __name__ == '__main__':
main(sys.argv)
执行命令安装redis-py:pip2 install redis。
执行脚本检测是否存在Bloom类型数据:python2 bloom_find.py <host> <port> <password>。
控制台日志若打印存在Bloom类型数据,可使用UNLINK命令删除。