どちらが優れているかを説明する前に、これらのコマンドの違いを見てみましょう。両方のDEL およびUNLINK ブロッキングモードでキー部分を解放します。そして違いは、価値のある部分を解放する方法です。
DEL ブロッキングモードでは常に値の部分を解放します。ただし、値が大きすぎる場合、たとえば大きなLISTの割り当てが多すぎます またはHASH 、Redisを長時間ブロックします。この問題を解決するために、RedisはUNLINKを実装しています コマンド、つまり「ノンブロッキング」削除。
実際、UNLINK 常に非ブロッキング/非同期であるとは限りません 。値が小さい場合、たとえばLISTのサイズ またはHASH 64未満です 、値はすぐに解放されます。このようにして、UNLINK DELとほぼ同じです 、ただし、DELよりも数回多くの関数呼び出しが必要です。 。ただし、値が大きい場合、Redisは値をリストに入れ、値は別のスレッドによって解放されます。つまり、非ブロッキング解放になります。このように、メインスレッドはバックグラウンドスレッドと同期する必要があり、これもコストがかかります。
結論として、値が小さい場合は、DEL 少なくとも、UNLINKと同じくらい良いです 。値が非常に大きい場合、たとえばLIST 数千または数百万のアイテムがある場合、UNLINK DELよりもはるかに優れています 。 DELはいつでも安全に置き換えることができます UNLINKを使用 。ただし、スレッドの同期が問題になる場合(マルチスレッドは常に頭痛の種です)、DELにロールバックできます。 。
更新:
Redis 6.0以降、新しい構成があります: lazyfree-lazy-user-del 。 はいに設定できます 、およびRedisはDELを実行します UNLINKを実行しているかのようにコマンド コマンド。