Sebelum membahas mana yang lebih baik, mari kita lihat perbedaan antara perintah-perintah ini. Keduanya DEL
dan UNLINK
membebaskan bagian kunci dalam mode pemblokiran. Dan perbedaannya adalah cara mereka membebaskan bagian nilai.
DEL
selalu membebaskan bagian nilai dalam mode pemblokiran. Namun, jika nilainya terlalu besar, mis. terlalu banyak alokasi untuk LIST
large yang besar atau HASH
, itu memblokir Redis untuk waktu yang lama. Untuk mengatasi masalah tersebut, Redis mengimplementasikan UNLINK
perintah, yaitu penghapusan 'tanpa pemblokiran'.
Faktanya, UNLINK
TIDAK selalu non-blocking/async . Jika nilainya kecil, mis. ukuran LIST
atau HASH
kurang dari 64
, nilai akan segera dibebaskan. Dengan cara ini, UNLINK
hampir sama dengan DEL
, kecuali bahwa panggilan fungsi memerlukan biaya lebih banyak daripada DEL
. Namun, jika nilainya besar, Redis memasukkan nilainya ke dalam daftar, dan nilainya akan dibebaskan oleh utas lain yaitu bebas non-blocking. Dengan cara ini, utas utama harus melakukan beberapa sinkronisasi dengan utas latar belakang, dan itu juga memerlukan biaya.
Kesimpulannya, jika nilainya kecil, DEL
setidaknya, sebagus UNLINK
. Jika nilainya sangat besar, mis. LIST
dengan ribuan atau jutaan item, UNLINK
jauh lebih baik daripada DEL
. Anda selalu dapat mengganti DEL
dengan aman dengan UNLINK
. Namun, jika Anda menemukan sinkronisasi utas menjadi masalah (multi-threading selalu memusingkan), Anda dapat melakukan rollback ke DEL
.
PERBARUI:
Sejak Redis 6.0, ada konfigurasi baru:lazyfree-lazy-user-del . Anda dapat mengaturnya menjadi ya , dan Redis akan menjalankan DEL
perintah seolah-olah menjalankan UNLINK
perintah.