2013-07-13 3 views
1

rub rubis gem을 사용 중입니다. 궁금 할 경우 예 :Redis 파이프 라인 실행 순서

redis.pipelined do 
    REDIS.del("users:#{current_user_id}:i-unread") 
    REDIS.lpush("users:#{current_user_id}:i-read", items) 
    REDIS.ltrim("users:#{current_user_id}:i-read", 0, Interaction::MAX_INTERACTIONS) 
end 

이 순서의 실행이 보장 되나요?

답변

2

물론 순서가 보장됩니다. 그렇지 않으면 파이프 라이닝이 쓸모 없게됩니다. 당신은 항상 코드를 볼 수 있습니다. 예를 들어,이 테스트는 명확하게 명령을 순차적으로 실행하는 것으로 가정합니다 : https://github.com/redis/redis-rb/blob/master/test/pipelining_commands_test.rb#L32

def test_bulk_and_multi_bulk_commands_mixed 
    r.pipelined do 
    r.lpush "foo", "s1" 
    r.lpush "foo", "s2" 
    r.mset("baz", "s3", "qux", "s4") 
    end 

    assert_equal 2, r.llen("foo") 
    assert_equal "s2", r.lpop("foo") 
    assert_equal "s1", r.lpop("foo") 
    assert_equal "s3", r.get("baz") 
    assert_equal "s4", r.get("qux") 
end 
2

예, 그것은 보장된다. 일반적으로 redis 파이프 라이닝은 메모리에서 서버 응답을 대기열로 보내는 것보다 복잡하기 때문에 쿼리 순서가 변경되지 않습니다.