sql >> Database teknologi >  >> NoSQL >> Redis

Ruby - Redis baseret mutex med udløbsimplementering

Hvis du bruger Redis 2.6+, kan du gøre dette meget mere enkelt med Lua scripting-motoren. Redis-dokumentationen siger:

Et Redis-script er transaktionsbestemt per definition, så alt hvad du kan gøre med en Redis-transaktion, kan du også gøre med et script, og normalt vil scriptet være både enklere og hurtigere.

Det er trivielt at implementere det:

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

Brug:

lock("somejob") { do_exclusive_job }


  1. mongo.so:> udefineret symbol:php_json_encode i Ukendt på linje 0. Efter installation mongo driver til php

  2. MongoDB print afstand mellem to punkter

  3. Introduktion til Apache HBase Snapshots, del 2:Deeper Dive

  4. MongoDB på Ubuntu starter ikke som en tjeneste, intet i loggen