2012-11-29 22 views
0

我试图并行执行多个Redis的查询,但得到一个错误:如何使用EM :: Synchrony :: Multi with redis?

/var/lib/gems/1.9.1/gems/em-synchrony-1.0.2/lib/em-synchrony.rb:53:in `resume': 
dead fiber called (FiberError) 

这里是代码:

require 'em-synchrony' 
require 'redis/connection/synchrony' 
require 'redis' 

redis = EM::Synchrony::ConnectionPool.new(size: 4) do 
    Redis.new 
end 

EM.synchrony do 
    multi = EM::Synchrony::Multi.new 
    multi.add :a, redis.alpush('foo', 1) 
    multi.add :b, redis.alpush('foo', 2) 
    res = multi.perform 

    p res 

    EM.stop 
end 

请帮助

回答

1

使用EventMachine的具体em-hiredis宝石代替的默认驱动程序。

gem install em-hiredis

require 'em-synchrony' 
require 'em-synchrony/em-hiredis' 

redis = EM::Synchrony::ConnectionPool.new(size: 4) do 
      EM::Hiredis.new 
     end 

任何地方EM::Synchrony使用时,通常建议使用随em-synchrony的同步特定库。这就是为什么声明em-synchrony/em-hiredis而不是require em-synchrony

相关问题