【发布时间】:2014-01-28 09:48:21
【问题描述】:
我有一个可用的 Sinatra 应用程序,它使用 redis-namespace 进行 Redis 连接。它运行良好,但在 Heroku 上,它的 10 个 Redis 连接总是用完,尽管流量很少 - 它们似乎保持打开很长时间,并且应用程序不断打开新连接。
所以,可能有更好的方法来构建我所拥有的东西,这样它就不会不断打开新的连接。或者也许我可以使用connection_pool... 虽然我不确定如何使用 with redis-namespace。
Sinatra 前端 (myapp/frontend.rb) 类似于:
require 'sinatra/base'
require 'myapp/store'
module MyApp
class Frontend < Sinatra::Base
registration_store = MyApp::Store::Registration.new
subscription_store = MyApp::Store::Subscription.new
get '/' do
...
end
...
end
end
并且访问 Redis 的 Store 类在 myapp/store.rb:
require 'redis'
require 'redis-namespace'
module MyApp
module Store
class RedisBase
attr_accessor :redis
def initialize
uri = URI.parse(ENV['REDISCLOUD_URL'])
redis = ::Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
@redis = ::Redis::Namespace.new(:myapp, :redis => redis)
end
class Registration < RedisBase
def add(user_id)
redis.sadd(:registrations, user_id)
end
...
end
class Subscription < RedisBase
...
end
end
end
end
前端通过 Store 类存储数据:registration_store.add(37)。
我是否做错了什么,不断打开不必要的新连接?或者,如何添加 connection_pool 或类似的?
【问题讨论】: