在我的代码中跨多个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(...)
答案 0 :(得分:0)
对于在单个进程上运行的单线程Web服务器,绝对这是正确的方法。你没有问题,因为Ruby的GIL确保不会有两行代码同时运行。
当您开始通过分叉产生多个进程时question arises - 因为它在修改之前共享内存。 通过查看某些分叉服务的文档,他们建议您重新建立连接: https://www.phusionpassenger.com/library/indepth/ruby/spawn_methods/#am-i-responsible-for-reestablishing-database-connections-after-the-preloader-has-forked-a-child-process