【问题标题】:how to use EM::Synchrony::Multi with redis?如何将 EM::Synchrony::Multi 与 redis 一起使用?
【发布时间】:2012-11-29 05:16:23
【问题描述】:

我正在尝试并行执行多个 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

请帮忙

【问题讨论】:

    标签: ruby asynchronous concurrency eventmachine em-synchrony


    【解决方案1】:

    使用 Eventmachine 特定的em-hiredis gem 而不是默认驱动程序。

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-25
      • 2018-03-06
      • 1970-01-01
      • 2015-10-14
      • 2016-07-09
      • 2015-08-17
      • 2021-10-11
      • 1970-01-01
      相关资源
      最近更新 更多