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

Ruby - mutex dựa trên Redis với triển khai hết hạn

Nếu bạn đang sử dụng Redis 2.6+, bạn có thể thực hiện việc này đơn giản hơn nhiều với công cụ tạo kịch bản Lua. Tài liệu của Redis cho biết:

Tập lệnh Redis là giao dịch theo định nghĩa, vì vậy mọi thứ bạn có thể làm với giao dịch Redis, bạn cũng có thể làm với một tập lệnh và thường thì tập lệnh sẽ đơn giản hơn và nhanh hơn.

Việc triển khai nó rất đơn giản:

LUA_ACQUIRE = "return redis.call('setnx', KEYS[1], 1) == 1 and redis.call('expire', KEYS[1], KEYS[2]) and 1 or 0"
def lock(key, timeout = 3600)
  if redis.eval(LUA_ACQUIRE, key, timeout) == 1
    begin
      yield
    ensure
      r.del key
    end
  end
end

Cách sử dụng:

lock("somejob") { do_exclusive_job }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Máy tính để bàn Redis Vue

  2. Cách thực hiện giao dịch có khôi phục trong Redis

  3. Tại sao Một cá thể Jedis không phải là threadsafe?

  4. Hàng đợi công việc có redis bằng BLPOP

  5. Sử dụng bộ Redis