我正在使用rub redis gem。想知道我是否这样做:
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
这个执行顺序是否有保证?
答案 0 :(得分:4)
当然订单是有保证的,否则流水线将是无用的。你可以随时查看代码。例如,此测试明确假定命令是按顺序执行的: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
答案 1 :(得分:4)
是的,保证。 通常,redis流水线操作并不比在内存中排队服务器响应复杂,因此它不会改变查询的顺序。