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

Script Redis Lua mengimplementasikan CAS (check-and-set)?

Anda akan baik-baik saja dalam hal atomisitas menurut dokumentasi Redis:

Redis menggunakan interpreter Lua yang sama untuk menjalankan semua perintah. Redis juga menjamin bahwa skrip dieksekusi dengan cara atom:tidak ada skrip atau perintah Redis lain yang akan dieksekusi saat skrip dieksekusi. Semantik ini mirip dengan MULTI / EXEC. Dari sudut pandang semua klien lain, efek skrip masih belum terlihat atau sudah selesai.

Namun, jika skrip terlalu lambat, itu menyebabkan masalah. Jadi, skrip adalah yang terbaik untuk operasi ringan yang membutuhkan logika dan atomisitas.

Celah lain yang mungkin Anda alami adalah, jika skrip gagal di tengah, panggilan yang telah Anda lakukan tidak dapat dibatalkan, meskipun skrip akan mengembalikan kesalahan.

Misalnya:Anda memiliki skrip seperti ini:

redis.call('set', 'foo', 1)
redis.call('rpush', 'foo', 2)

Eksekusi skrip akan mengembalikan kesalahan, tetapi foo telah diatur dalam redis sebagai 1 .

Sesuatu yang tidak terkait dengan pertanyaan Anda:Saya perhatikan bahwa Anda menggunakan

eval "your_raw_code" key_count keys argv

sebenarnya Anda dapat memanggil file skrip lua di eval ketika Anda berada di terminal:

> redis-cli eval "$(cat path/to/script/script_name.lua)" key_count keys argv



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Spring Boot redisTemplate autowiring gagal

  2. Kesalahan Perintah Pengelompokan Perusahaan Redis 'CLUSTER'

  3. Bagaimana menangani pasangan pengguna dan soket dengan node.js + redis

  4. Bagaimana Mendaftar Semua Basis Data Redis?

  5. Kapan menggunakan penyimpanan kunci/nilai seperti Redis sebagai gantinya/di sepanjang sisi database SQL?