sql >> Databáze >  >> NoSQL >> Redis

Ruby - mutex založený na Redis s implementací expirace

Pokud používáte Redis 2.6+, můžete to udělat mnohem jednodušeji pomocí skriptovacího jádra Lua. Dokumentace Redis říká:

Skript Redis je z definice transakční, takže vše, co můžete dělat s transakcí Redis, můžete také dělat se skriptem a obvykle bude skript jednodušší a rychlejší.

Jeho implementace je triviální:

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

Použití:

lock("somejob") { do_exclusive_job }


  1. MongoDB C# Query Pole objektů, které obsahují hodnotu vlastnosti

  2. Laravel – ukládání do mezipaměti výmluvné s častými aktualizacemi

  3. Jaká je nejlepší strategie pro synchronizaci dat Redis do MySQL?

  4. Mám používat redis k ukládání velkého počtu binárních souborů?