【发布时间】:2019-06-13 16:16:41
【问题描述】:
我想使用多线程 Puma 作为生产服务器,所以我的代码应该是线程安全的。 我读到全局变量的使用不是线程安全的。在这种情况下,全局变量的替代方法是什么? 我使用全局变量(没有值更改)作为设置/获取等的 Redis 键。
#initializers/redis.rb
$DRIVER_LOCATIONS = "driver_locations"
在代码中
REDIS.with do |conn|
conn.geoadd($DRIVER_LOCATIONS, latitude, longitude, id)
end
或者没有必要改变什么?
【问题讨论】:
-
如果您只是阅读它们,那么您应该没问题。当您尝试同时写入同一个地方时,会出现大多数/所有问题。顺便说一句,为什么这里是全局变量,而不是常量?
-
@anothermh:哦,但是使用单线程数据库会导致应用程序完全混乱。甚至根本没有数据库。
-
@anothermh:我是说 Redis 的单线程特性与不正确实现的多线程应用程序可能对自身造成的损坏/损坏的数量无关。
标签: ruby-on-rails ruby multithreading ruby-on-rails-5