unlink
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)で削除します。
- unlinkCommand() <db.c>: コマンド開始
- delGenericCommand(async) <db.c>: 統合削除コマンド、async で削除を要求
- 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
返事がかかってなれば、メールでお知らせします。
