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

StackExchange.Redis - Penggunaan LockTake / LockRelease

Ada 3 bagian kunci:

  • kunci (nama unik dari kunci di database)
  • nilai (token yang ditentukan pemanggil yang dapat digunakan untuk menunjukkan siapa yang "memiliki" kunci, dan untuk memeriksa apakah pelepasan dan perpanjangan kunci dilakukan dengan benar)
  • durasi (penguncian sengaja dibuat dengan durasi terbatas)

Jika tidak ada nilai lain yang terlintas dalam pikiran, seorang pemandu mungkin membuat "nilai" yang sesuai. Kami cenderung menggunakan nama mesin (atau versi munged dari nama mesin jika beberapa proses dapat bersaing di mesin yang sama).

Juga, perhatikan bahwa mengambil kunci adalah spekulatif , bukan memblokir . Sangat mungkin Anda gagal untuk mendapatkan kunci, dan karenanya Anda mungkin perlu menguji ini dan mungkin menambahkan beberapa logika coba lagi.

Contoh tipikalnya adalah:

RedisValue token = Environment.MachineName;
if(db.LockTake(key, token, duration)) {
    try {
        // you have the lock do work
    } finally {
        db.LockRelease(key, token);
    }
}

Perhatikan bahwa jika pekerjaannya panjang (khususnya satu putaran), Anda mungkin ingin menambahkan beberapa LockExtend sesekali panggilan di tengah - sekali lagi ingat untuk memeriksa keberhasilan (jika waktu habis).

Perhatikan juga bahwa semua perintah redis individual bersifat atomik, jadi Anda tidak perlu khawatir tentang dua operasi rahasia yang bersaing. Untuk unit multi-operasi yang lebih kompleks, transaksi dan skrip adalah pilihan.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. pindaian vs kunci klien ruby ​​redis

  2. _http_server.js:192 throw new RangeError(`Kode status tidak valid:${statusCode}`);

  3. Cara Mengekspor Kunci Redis sebagai CSV Menggunakan CLI

  4. Penyisipan Massal Redis

  5. Redis Pub/Sub ServiceStack, membatalkan utas