Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Redis C # - Sử dụng giá trị Incr trong giao dịch

Có một tính năng cơ bản của redis MULTI / EXEC đơn vị có nghĩa là bạn không thể nhận được kết quả trong quá trình hoạt động. Do đó, có hai cách phổ biến để thực hiện những gì bạn yêu cầu:

  1. Sử dụng Lua (ScriptEvaluate[Async] ); một tập lệnh Lua thực thi trên máy chủ từ đầu đến cuối, hiệu quả và tránh tất cả các vấn đề liên quan đến thời gian khứ hồi (độ trễ hoặc băng thông) hoặc sự cạnh tranh từ các kết nối khác
  2. Sử dụng vòng lặp lạc quan đọc giá trị hiện tại, sau đó tạo giao dịch trong SE-Redis có thêm ràng buộc rằng giá trị bạn vừa đọc là giống nhau và thực hiện các tác dụng phụ bên trong giao dịch; thư viện sẽ phối hợp máy móc XEM vv cần thiết để làm cho điều này trở nên mạnh mẽ, nhưng nếu điều kiện ràng buộc trở nên không hợp lệ (tức là thư viện trả về false ), bạn cần phải làm lại mọi thứ từ đầu

Thành thật mà nói, những ngày này tôi luôn hướng dẫn mọi người đến phương án 1; tùy chọn 2 chỉ "hấp dẫn" (và tôi sử dụng thuật ngữ đó khá sai) nếu không có tập lệnh Lua phía máy chủ.

Tôi không sử dụng PC, nhưng tôi đoán tập lệnh sẽ giống như sau:

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. Làm cách nào để cài đặt tiện ích mở rộng php-redis bằng cách sử dụng phương pháp tiếp cận hình ảnh PHP Docker chính thức?

  2. Dữ liệu mùa xuân Redis hoạt động HGETALL

  3. Tại sao Redis có khả năng Pub / Sub?

  4. Làm thế nào để chèn hàng tỷ dữ liệu vào Redis một cách hiệu quả?

  5. Đã đạt đến kết nối tối đa Azure Redis Cache