栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用sidekiq处理两个单独的Redis实例?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用sidekiq处理两个单独的Redis实例?

因此,有一件事是,根据FAQ,“ Sidekiq消息格式非常简单且 稳定 :它只是JSON格式的哈希”。强调我的想法-
我认为将JSON发送到sidekiq并不容易。尤其是当您想要精细地控制将作业发送到哪个Redis实例时(例如在OP的情况下),我可能只需要编写一个小的包装即可让我指示Redis实例以及要排队的作业。

对于凯文·比德尔的更普遍的情况,循环作业到Redis的情况下,我想你 不要 它希望有控制的Redis实例used–
你只是想排队,并有分布自动管理。到目前为止,似乎只有一个人要求这样做,他们提出了一个使用

Redis::Distributed
以下解决方案的解决方案:

datastore_config = YAML.load(ERB.new(File.read(File.join(Rails.root, "config", "redis.yml"))).result)datastore_config = datastore_config["defaults"].merge(datastore_config[::Rails.env])if datastore_config[:host].is_a?(Array)  if datastore_config[:host].length == 1    datastore_config[:host] = datastore_config[:host].first  else    datastore_config = datastore_config[:host].map do |host|      host_has_port = host =~ /:d+z/      if host_has_port        "redis://#{host}/#{datastore_config[:db] || 0}"      else        "redis://#{host}:#{datastore_config[:port] || 6379}/#{datastore_config[:db] || 0}"      end    end  endendSidekiq.configure_server do |config|  config.redis = ::ConnectionPool.new(:size => Sidekiq.options[:concurrency] + 2, :timeout => 2) do    redis = if datastore_config.is_a? Array      Redis::Distributed.new(datastore_config)    else      Redis.new(datastore_config)    end    Redis::Namespace.new('resque', :redis => redis)  endend

另一件事是在你的追求考虑,以获得高可用性和故障转移是让Sidekiq专业,其中包括可靠性的特点:“该Sidekiq专业客户能承受瞬时Redis的中断将本地排队工作时的错误,并尝试提供这些就业机会。连接恢复后。”
由于sidekiq始终用于后台进程,因此,如果Redis实例发生故障,则短暂的延迟不会影响您的应用程序。如果您的两个Redis实例之一发生故障并且正在使用轮询,则除非使用此功能,否则您仍然会丢失一些工作。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/399460.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号