Redis的Ruby实例连接

时间:2018-03-24 17:01:41

标签: ruby redis

在我的代码中跨多个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(...)

1 个答案:

答案 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