Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Làm việc với hai phiên bản redis riêng biệt với sidekiq?

Vì vậy, một điều là Theo Câu hỏi thường gặp, "Định dạng tin nhắn Sidekiq khá đơn giản và ổn định :nó chỉ là một Hash ở định dạng JSON. "Tôi nhấn mạnh - Tôi không nghĩ việc gửi JSON đến sidekiq là quá khó để thực hiện. Đặc biệt là khi bạn muốn kiểm soát chi tiết xung quanh phiên bản Redis nào bạn gửi công việc, như trong Tình huống của OP, có lẽ tôi chỉ viết một đoạn tóm tắt nhỏ cho phép tôi chỉ ra một phiên bản Redis cùng với công việc đang được xếp hàng.

Đối với tình huống chung hơn của Kevin Bedell để chuyển đổi công việc sang các phiên bản Redis, tôi tưởng tượng bạn không muốn có quyền kiểm soát phiên bản Redis nào được sử dụng - bạn chỉ muốn xếp hàng và để bản phân phối được quản lý tự động. Có vẻ như chỉ có một người yêu cầu điều này cho đến nay và họ đã đưa ra giải pháp sử dụng 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
  end
end

Sidekiq.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)
  end
end

Một điều khác cần xem xét trong nhiệm vụ của bạn để có được tính khả dụng cao và không xảy ra lỗi là tải Sidekiq Pro bao gồm các tính năng đáng tin cậy:"Ứng dụng khách Sidekiq Pro có thể chịu được sự cố tạm thời của Redis. Nó sẽ xếp hàng các công việc cục bộ khi có lỗi và cố gắng thực hiện các công việc đó khi kết nối được khôi phục. " Vì sidekiq dù sao cũng dành cho các quy trình nền, nên một khoảng thời gian ngắn nếu phiên bản Redis gặp sự cố sẽ không ảnh hưởng đến ứng dụng của bạn. Nếu một trong hai phiên bản Redis của bạn gặp sự cố và bạn đang sử dụng tính năng quay vòng, bạn vẫn bị mất một số công việc trừ khi bạn đang sử dụng tính năng này.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cập nhật thực thể trong redis với spring-data-redis

  2. StackExchange.Redis sử dụng nhiều điểm cuối và kết nối như thế nào?

  3. Làm cách nào để tìm Id phiên khi sử dụng express / connect và cửa hàng phiên?

  4. Truy vấn đa trường trên Redis bằng Redis Spring

  5. StackExchange.Redis.RedisTimeoutException:Hết thời gian chờ phản hồi