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
이 진행되는 동안 다른 어떤 작업도 수행 할 수 없도록 잠금을 구현할 수 있다고 생각하지만 위대한 솔루션처럼 느껴지지 않는 사람은 누구나 더 좋은 방법을 찾았습니까?
당신은 https://github.com/igrigorik/em-synchrony를 보았습니까? em-hiredis에 대한 핸들러가 있습니다 – hellvinz
예'em-synchrony'에 대해 알고 있지만 아무것도 변경하지 않습니다. 상황은 여전히 동일한 순서로 발생합니다. 제어 흐름을 쉽게 볼 수 있습니다 (그러나이 경우 경쟁 조건이 덜 명확해질 것이라고 말합니다). – Theo
이런 종류의 일을하려면 별도의 연결을 열거 나 연결 풀을 사용해야합니다. – balu