Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Apakah perintah UNLINK selalu lebih baik daripada perintah DEL?

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.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mengeksekusi perintah redis eval untuk menjalankan skrip Lua di nodeJS

  2. Bagaimana cara menghindari panggilan Redis dalam batasan skrip Lua?

  3. Berikan file ke Pekerjaan Aktif / pekerjaan latar belakang

  4. Bagaimana cara berkomunikasi dynos Web dan Worker dengan Node.js di Heroku?

  5. Node.js Kue cara memulai kembali pekerjaan yang gagal