sql >> Database >  >> NoSQL >> Redis

Ruby - op Redis gebaseerde mutex met implementatie van de vervaldatum

Als u Redis 2.6+ gebruikt, kunt u dit veel eenvoudiger doen met de Lua-scriptengine. De Redis-documentatie zegt:

Een Redis-script is per definitie een transactie, dus alles wat u met een Redis-transactie kunt doen, kunt u ook met een script doen, en meestal is het script zowel eenvoudiger als sneller.

Het implementeren ervan is triviaal:

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

Gebruik:

lock("somejob") { do_exclusive_job }


  1. Verschil tussen id- en _id-velden in MongoDB

  2. Zoeken op meerdere collecties in MongoDB

  3. MongoDB aggregaat vullen ontbrekende dagen

  4. Gemiddelde aggregatiequery's in Meteor