簡體   English   中英

Sinatra Synchrony與Redis連接池

[英]Sinatra Synchrony with Redis connection pooling

這是使用Sinatra Synchrony處理Redis連接池的正確方法嗎?

我的gemfile看起來像這樣:

gem 'sinatra-synchrony'
gem 'hiredis'
gem 'redis'

sinatra服務器文件使用經典樣式方法,通常如下所示:

require 'sinatra'
require 'sinatra/synchrony'
require 'redis/connection/hiredis'
require 'redis/connection/synchrony'
require 'redis'

redis = EventMachine::Synchrony::ConnectionPool.new(size: 5) do
  Redis.new(path: '/tmp/redis.sock')
end

get / do
  # lots of redis reads and writes
end

然后,我啟動同一服務器應用程序的多個實例,每個實例位於不同的端口下,並使用nginx在它們之間進行負載平衡。

這是Redis與Sinatra服務器連接池的正確解決方案嗎?

這是一個工作的例子,我刪除了sinatra / sinatra,因為我覺得不需要它,我無法使它工作:

的Gemfile:

source :rubygems

gem 'thin'
gem 'rack-fiber_pool'
gem 'hiredis'
gem 'sinatra'
gem 'em-synchrony'
gem 'redis'

config.ru:

require 'rubygems'
require 'bundler/setup'
require 'sinatra/base'
require 'redis/connection/synchrony'
require 'redis'
require 'rack/fiber_pool'

class App < Sinatra::Base  

  set :template_path, '/tmp'

  def initialize
    super
    @redis = EventMachine::Synchrony::ConnectionPool.new(size: 2) do
      Redis.new
    end
  end

  get '/' do
    @redis.multi do |r|
      r.set('v', "value2")
      r.set('v2', '43')
    end

    @redis.get('v')
  end
end

use Rack::FiberPool
use Rack::CommonLogger
run App

並在(在同一文件夾中)運行它:

bundle
bundle exec thin start

在實際應用程序中,您將從config.ru文件中刪除應用程序代碼並添加一個require但至少它會給你一個開始:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM