2015-05-11 2 views
0

Я хочу сохранить счет в redis. Я хочу увеличить счет, только если ключ существует. Что я делаю не так? exists возвращает false, а incr выполняется.redis-rb multi only increment if key set

key = "blah" 
result = REDIS_DB.multi do 
    exists = REDIS_DB.exists(key) 
    REDIS_DB.incr(key) if exists 
end 

# result: [false, 1] 

Я новичок в redis. Я только что прочитал the redis transactions doc. Насколько я понимаю, команды в multi должны выполняться один за другим?

Rails 4.0.2, 3.0.1 Redis, redis-rb (клиент библиотека рубин для Redis)

ответ

1

Это может быть то, что я искал:

result = REDIS_DB.watch(key) do 
    if REDIS_DB.exists(key) 
    REDIS_DB.incr(key) 
    else 
    REDIS_DB.unwatch 
    end 
end