全局变量的线程安全替代

时间:2019-01-19 18:42:09

标签: ruby-on-rails ruby multithreading ruby-on-rails-5

我想将多线程Puma用作生产服务器,因此我的代码应该是线程安全的。 我读到全局变量的使用不是线程安全的。在这种情况下,全局变量的替代方法是什么? 我将全局变量(没有值更改)用作设置/获取等的Redis键。

#initializers/redis.rb

$DRIVER_LOCATIONS = "driver_locations"

和代码中

REDIS.with do |conn|
  conn.geoadd($DRIVER_LOCATIONS, latitude, longitude, id)
end

还是不需要更改某些内容?

1 个答案:

答案 0 :(得分:0)

如评论中所述,您可能应该在其中使用常量而不是全局变量

#initializers/redis.rb

DRIVER_LOCATIONS = "driver_locations"

# ...

REDIS.with do |conn|
  conn.geoadd(DRIVER_LOCATIONS, latitude, longitude, id)
end

使用全局变量在您的用例中应该不会很糟糕,因为它是在初始化期间设置的,我假设它只做一次。