2012-09-30 42 views
2

因爲redis-rb是線程安全的,所以不要把$redis = Redis.new放在Unicorn的after_fork中,這會帶來什麼負面影響?假設我有一個以上的工人。

與將這行代碼放入environment.rb或intializer中相反?

回答

4

after_fork與線程安全無關。它在父進程分派子進程時使用,而不是在產生線程時使用。

爲什麼你應該關心

如果你從來沒有叉,你可能不知道。

當您fork時,父進程和子進程共享文件和套接字描述符(db連接,redis連接)。如果您沒有重新打開孩子與Redis的連接,則可以使用來自孩子的數據在父座上交錯父母的數據。

閱讀A Unix Shell in Ruby Pipes瞭解更多詳情。

相關問題