2013-07-13 126 views
1

我正在使用rub redis 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流水線並不比在內存中排隊服務器響應更復雜,所以它不會改變查詢的順序。