すべてのプロダクト
Search
ドキュメントセンター

Tair (Redis® OSS-Compatible):Tairでキーを一括削除する

最終更新日:Nov 14, 2024

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 *" は、test1test2test3など、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 *" は、test1test2test3など、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>"