Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Ruby - mutex oparty na Redis z implementacją wygaśnięcia

Jeśli używasz Redis 2.6+, możesz to zrobić znacznie prościej dzięki silnikowi skryptowemu Lua. Dokumentacja Redis mówi:

Skrypt Redis jest z definicji transakcyjny, więc wszystko, co możesz zrobić z transakcją Redis, możesz również zrobić za pomocą skryptu, a zwykle skrypt będzie zarówno prostszy, jak i szybszy.

Implementacja jest banalna:

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

Użycie:

lock("somejob") { do_exclusive_job }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Używać wielu baz danych z jednym skryptem Redis Lua?

  2. Redis jest skonfigurowany do zapisywania migawek RDB, ale obecnie nie jest w stanie utrzymać się na dysku - Ubuntu Server

  3. Redis rozproszony przyrost z blokowaniem

  4. Jak skonfigurować handlery w RedMQ ze zdarzeń zgłoszonych w mojej domenie

  5. Redis:stan wyścigowy i jednowątkowy