gpt4 book ai didi

ruby - Sinatra Synchrony 与 Redis 连接池

转载 作者:IT王子 更新时间:2023-10-29 06:01:26 26 4
gpt4 key购买 nike

这是使用 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,因为我觉得不需要它而且我无法让它工作:

gem 文件:

source :rubygems

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

配置.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 文件中删除应用程序代码并添加一个要求,但至少它给了您一个开始:)

关于ruby - Sinatra Synchrony 与 Redis 连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8856001/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com