RedisのDEL key
コマンドを使用して、1つのキーを削除します。 キーを一括削除するには、LinuxのcatコマンドとxargsコマンドとRedisのDELコマンドを組み合わせます。 ファジーマッチロジックを使用して同じプレフィックスまたはサフィックスを持つキーを削除する場合は、RedisのSCANおよびDELコマンドを使用することを推奨します。
指定されたキーの一括削除
複数の指定キーの削除
コマンドを実行する前に、削除するキーのリストをファイルに書き込みます。
catコマンドを実行して、ファイルから各行をRedisキーとして読み取ります。 次に、redis-cli
を使用してRedisサーバーに接続し、DELコマンドを実行してキーを削除します。 コマンド構文:
cat <file> | xargs redis-cli -h <host> -a <password> DEL
xargsコマンドは、引数の長いリストを小さなチャンクに分割し、それらを引数として他のコマンドに渡すことができます。 これにより、Linuxの「引数リストが長すぎます」エラーが防止されます。 このコマンドは、単独で、またはパイプ演算子、リダイレクト演算子、または他のコマンドと一緒に使用できます。
パラメーター:
file: 削除するキーを含むファイル。 例: key.txt。
host: Redisインスタンスへの接続に使用されるエンドポイント。 詳細については、「エンドポイントの表示」をご参照ください。
password: Redisインスタンスへの接続に使用されるパスワード。 詳細については、「インスタンスへの接続」をご参照ください。
例:
cat key.txt | xargs redis-cli -h r-bp127cu5tb*****.redis.rds.aliyuncs.com -a Test**** DEL
ファジーマッチロジックを使用したキーの削除
方法1 (推奨): SCANコマンドとDELコマンドを使用する
特定の条件を満たすキーを繰り返しスキャンして削除します。 サンプルコード:
import redis
import sys
def main(argv):
if len(argv) < 4:
print("Usage: python scan_and_del.py host port password match")
sys.exit(-1)
host = argv[1]
port = argv[2]
password = argv[3]
match = argv[4]
print("host: %s, port: %s, password: %s, match: %s\n" % (host, port, password, match))
redis_cli = redis.StrictRedis(host=host, port=port, password=password)
cursor = 0
rnd = 1
while rnd == 1 or cursor != 0:
result = redis_cli.scan(cursor=cursor, match=match, count=1000)
ret_cursor = result[0]
ret_keys = result[1]
num_keys = len(ret_keys)
print("del %d keys in round %d, cursor: %d" % (num_keys, rnd, ret_cursor))
if 0 != num_keys:
ret_del = redis_cli.delete(*ret_keys)
print("ret_del: %d, ret_keys: %s" % (ret_del, ret_keys))
cursor = ret_cursor
rnd += 1
print("")
if __name__ == '__main__':
main(sys.argv)
上記のサンプルコードを含むscan_and_del.pyスクリプトを呼び出し、Redisインスタンスの接続情報とキー照合パターンを指定して、ファジー削除を実装します。
python scan_and_del.py <host> <port> <password> "<key>"
パラメーター:
host: Redisインスタンスへの接続に使用されるエンドポイント。 詳細については、「エンドポイントの表示」をご参照ください。
port: Redisインスタンスのポート番号。
password: Redisインスタンスへの接続に使用されるパスワード。 詳細については、「インスタンスへの接続」をご参照ください。
key: データベース内の特定の条件を満たすキー。 たとえば、
"test *"
は、test1
、test2
、test3
など、testで始まるキーと一致します。ワイルドカードの一致の説明:
w?rld: world、warld、wxrldなど、wで始まりrlで終わる5文字の文字列に一致します。
w * rld: wrldやwoooorldなど、wで始まりrlで終わる文字列に一致します。
w[ae]rld:warld および werld に一致しますが、world には一致しません。
w[^ e]rld:world および warld に一致しますが、werld には一致しません。
w[a-b]rld:warld および wbrld に一致します。
方法2: KEYSおよびDELコマンドを使用する
KEYSコマンドは、高いCPU使用率を引き起こす可能性があります。 オフピーク時にこのコマンドを使用することを推奨します。
大規模なデータベースでKEYSコマンドを使用すると、データベースのパフォーマンスが低下します。 少量のデータを処理する場合は、このコマンドを使用することを推奨します。
KEYSコマンドを実行して、特定の条件を満たすすべてのキーに対してワイルドカード照合を実行し、DELコマンドを実行してキーを削除します。
redis-cli -h <host> -a <password> KEYS "<key>" | xargs redis-cli -h <host> -a <password> DEL
パラメーター:
file: 削除するキーを含むファイル。 例: key.txt。
password: Redisインスタンスへの接続に使用されるパスワード。 詳細については、「インスタンスへの接続」をご参照ください。
key: データベース内の特定の条件を満たすキー。 たとえば、
"test *"
は、test1
、test2
、test3
など、testで始まるキーと一致します。ワイルドカードの一致の説明:
w?rld: world、warld、wxrldなど、wで始まりrlで終わる5文字の文字列に一致します。
w * rld: wrldやwoooorldなど、wで始まりrlで終わる文字列に一致します。
w[ae]rld:warld および werld に一致しますが、world には一致しません。
w[^ e]rld:world および warld に一致しますが、werld には一致しません。
w[a-b]rld:warld および wbrld に一致します。
例:
redis-cli -h r-bp127cu5tb*****.redis.rds.aliyuncs.com -a Test**** KEYS "keys*" | xargs redis-cli -h r-bp127cu5tb*****.redis.rds.aliyuncs.com -a Test**** DEL
指定されたキーが削除されているかどうかを確認する
redis-cli -h <host> -a <password> KEYS "<key>"