Redis
 sql >> база данни >  >> NoSQL >> Redis

Ruby - Redis базиран мютекс с изпълнение на изтичане

Ако използвате Redis 2.6+, можете да направите това много по-просто със скриптовия двигател на Lua. Документацията на Redis казва:

Скриптът на Redis е транзакционен по дефиниция, така че всичко, което можете да правите с транзакция на Redis, можете да правите и със скрипт и обикновено скриптът ще бъде едновременно по-опростен и по-бърз.

Прилагането му е тривиално:

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

Употреба:

lock("somejob") { do_exclusive_job }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да поправите Redis ключове, сериализирани с Java

  2. Как да конвертирате съществуваща релационна база данни в магазин ключ-стойност?

  3. Какви са основните разлики между Redis Pub/Sub и Redis Stream?

  4. обработка на промени в пространството на имена по време на десериализация на JSON низ

  5. Как да използвате сортирани списъци на Redis