どちらが優れているかを説明する前に、これらのコマンドの違いを見てみましょう。両方の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
を実行しているかのようにコマンド コマンド。