【发布时间】:2018-09-03 04:17:15
【问题描述】:
在我的跨多个 URL 路由重用 redis 连接的代码中,这是在 Redis 中为单线程定义实例的正确方法吗?
class Red
@conn ||= H2O::Redis.new(:host => '127.0.0.1', :port => 6379)
class << self
attr_reader :conn
end
end
e.g. Route "/set"
require "/www/test.rb"
redis = Red.conn
redis.set(...)
e.g. Route "/get"
require "/www/test.rb"
redis = Red.conn
redis.get(...)
【问题讨论】:
-
这行得通,你可以通过调用
Red.conn.object_id看到你每次都在使用同一个对象 -
require Red不起作用,你需要一个文件而不是一个类,而且你不应该在路由中需要,在其他地方需要 -
@maxplener,我已经编辑了代码,它是“/www/test.rb”在 H2O 网络服务器中的 MRuby 上工作。
-
@Anthony 有人建议使用“连接池”库实现,我的代码 Singleton 真的适合 Web 服务器环境吗?