7

我正在使用 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

这个执行顺序有保证吗?

4

2 回答 2

7

当然顺序是有保证的,否则流水线就没用了。您可以随时查看代码。例如,这个测试清楚地假设命令是按顺序执行的: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
于 2013-07-14T04:23:26.257 回答
7

是的,这是有保证的。一般来说,redis流水线并不比在内存中排队服务器响应更复杂,所以它不会改变查询的顺序。

于 2013-07-14T04:26:51.350 回答