UNLINK

Redis 開発者教育の申込 Redis 定期点検/技術サポート
Redis Technical Support
Redis エンタープライズサーバー
Redis Enterprise Server

キー削除

このコマンドは Redis 4.0 で追加されたもので、DEL との違いは非同期(async)で別スレッド(thread)のバックグラウンドで実行される点です。   そのため collection データ型でメンバー数が多い場合、DEL よりはるかに速く処理されます。

性能テスト

Set データ型のキー1つに10万個のメンバーを入れ、DEL と UNLINK でそれぞれ削除し SLOWLOG で処理時間を測定しました。 値が占めるメモリは約 12MB でした。

  • DEL コマンドでの削除時間: 44,217 microsecond
  • UNLINK コマンドでの削除時間: 25 microsecond
  • 処理時間の比較: UNLINK は約 1700倍速いです。   メンバー数が多くキー削除に時間がかかり性能問題になる場合は このコマンドを使用してください。

内部構造

キー削除は同期(sync)で行い、値の削除は別スレッドで非同期(async)に処理します。   ただしメンバー数が 64 個以下の場合は DEL と同様に同期(sync)で削除します。

  1. unlinkCommand() <db.c>: コマンド開始
  2. delGenericCommand(async) <db.c>: 統合削除コマンド、async で削除を要求
  3. dbAsyncDelete() <lazyfree.c>: Async で削除処理
    • dictUnlink() <dict.c>: キー削除。キーはすぐ(sync)削除します。
    • lazyfreeGetFreeEffort() <lazyfree.c>: メンバー数を返します。String は常に 1 を返します。
    • メンバー数が 64 個以下の場合は DEL と同様にすぐ(sync)削除します。 メンバー数が少ない場合、別スレッドで処理する方が時間がかかるためです。
    • bioCreateBackgroundJob(BIO_LAZY_FREE) <lazyfree.c>: メンバー数が 64 個を超えると別スレッドのバックグラウンドで値を削除(メモリ解放)します。

構文

UNLINK key [key ...] [type]

  • このコマンドは version 4.0.0 から使用できます。
  • 時間計算量は O(1) です。ただし別スレッドで値を削除(メモリ解放)する時間計算量は O(N) です。 ここで N はメンバー数です。
  • ent811 で type を追加。
関連コマンド DEL
Clients for Java Jedis, Lettuce, Redisson
Clients for C Hiredis

<< EXISTS UNLINK KEYS >>

Email 返事がかかってなれば、メールでお知らせします。