如何在 Ruby 中使用 Redis 管道进行循环



我正在使用Ruby gem https://github.com/redis/redis-rb。

我想使用管道在 1 次网络行程中向 Redis 服务器发送多个 Redis 命令。如果我有一个循环,我该怎么做?

例如,这行得通吗?还是简单地一个接一个地发送所有命令?

cache = Redis.new() #blah blah
normalized = cache.pipelined do
        urls.each do |url|
            key= "key:#{url}"    
            cache.get(key)
            key2 = "key2:#{url}"
            cache.get(key2)
        end
    end

"一次网络旅行"的措辞是一种误解。流水线模式所做的只是在等待前一个命令的结果时发送其他命令。这与默认值相反,在默认值中,每个请求都会阻塞,直到完成。

如果该 Ruby 库阻塞,那么它将按顺序发出它们,我相信它会阻止任何需要结果的内容。有些异步库确实可以更好地利用流水线模式,因为更容易将结果与该模型中的变量匹配。这也是更多的工作。

通常,您使用pipelined执行多个作业,而不是检索。这样,您无需等待INCR的结果完成即可转到下一个结果,您可以立即发射并忘记。

如果要进行快速检索,请使用 MGET

最新更新