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

Redis C# - Menggunakan nilai Inc dalam transaksi

Ada fitur dasar unit redis MULTI/EXEC yang berarti Anda tidak bisa mendapatkan hasil selama operasi. Dengan demikian, ada dua cara umum untuk melakukan apa yang Anda minta:

  1. Gunakan Lua (ScriptEvaluate[Async] ); skrip Lua dijalankan pada server awal-ke-akhir, efisien, dan menghindari semua masalah yang terkait dengan waktu bolak-balik (latensi atau bandwidth) atau persaingan dari koneksi lain
  2. Gunakan loop optimis yang membaca nilai saat ini, lalu buat transaksi di SE-Redis yang menambahkan batasan bahwa nilai yang baru saja Anda baca sama, dan jalankan efek samping di dalam transaksi; perpustakaan akan mengoordinasikan mesin WATCH dll yang diperlukan untuk membuatnya kuat, tetapi jika kondisi kendala ternyata tidak valid (yaitu perpustakaan mengembalikan false ), Anda perlu mengulang semuanya dari awal

Terus terang, akhir-akhir ini saya selalu membimbing orang ke opsi 1; opsi 2 hanya "menarik" (dan saya menggunakan istilah itu dengan tidak benar) jika skrip Lua sisi server tidak tersedia.

Saya tidak menggunakan PC, tapi saya kira skripnya akan terlihat seperti:

local id = redis.call("incr", KEYS[1])
redis.call("hset", KEYS[2], tostring(id), ARGV[1])
return id



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Menginstal Redis di Ubuntu 16.04/18.04

  2. Redis Sentinel

  3. Mencari nilai redis db

  4. Rails bagaimana cara mengetahui apakah pekerja sidekiq selesai dengan perform_async

  5. Klien yang Diketik Redis