2011-05-01 3 views
3

em-hiredis (EventMachine을 사용하는 Ruby 드라이버)과 같은 Redis 드라이버에서 MULTI/EXEC (및 WATCH)을 어떻게 사용합니까? 내가 실행하는 경우 :이벤트 드라이버가있는 Redis multi/exec

redis.multi do 
    redis.sadd("foo", "bar") do 
    redis.inc("baz", "qux") do 
     redis.exec do 
     puts 'yay!' 
     end 
    end 
    end 
end 

응용 프로그램의 다른 부분이 많은 예를 들어, 상상 (계속있는 경우 나 타이머를 가지고,의 EXEC 전에 작업에 몰래 관리하는 기회가 있다는 것을 위의 코드가 1 초 이상 걸리는 경우, 증분 명령 중 일부는 MULTI/EXEC의 일부로 전송됩니다. 트랜잭션을 중단하려면 어떻게합니까? 사라진 부분이되어 버렸습니다. 더 나쁜 시나리오를 생각해내는 것은 쉽습니다)./EXEC이 진행되는 동안 다른 어떤 작업도 수행 할 수 없도록 잠금을 구현할 수 있다고 생각하지만 위대한 솔루션처럼 느껴지지 않는 사람은 누구나 더 좋은 방법을 찾았습니까?

+0

당신은 https://github.com/igrigorik/em-synchrony를 보았습니까? em-hiredis에 대한 핸들러가 있습니다 – hellvinz

+0

예'em-synchrony'에 대해 알고 있지만 아무것도 변경하지 않습니다. 상황은 여전히 ​​동일한 순서로 발생합니다. 제어 흐름을 쉽게 볼 수 있습니다 (그러나이 경우 경쟁 조건이 덜 명확해질 것이라고 말합니다). – Theo

+0

이런 종류의 일을하려면 별도의 연결을 열거 나 연결 풀을 사용해야합니다. – balu

답변

0

@balu이 질문에 대한 언급에서 언급했듯이 다중 연결 없이는 할 수 없습니다.

+0

누군가이 질문에 대한 적절한 답을 쓸 수 있다면 기꺼이 대답을하고이를 삭제할 것입니다. – Theo

+0

안녕하세요, [이] (http://stackoverflow.com/questions/28457538/sql-trigger-after-insert-update-another-table-with-conditions) 대답 해 주셔서 감사합니다. – stom