在我的 Rails 应用程序中,我需要在每次页面加载时查询二进制文件数据库。查询是只读的。文件大小为 1.4 MB。我有两个问题:
1) 将File
对象缓存在类变量中有意义吗?
def some_controller_action
@@file ||= File.open(filename, 'rb')
# binary search in @@file
end
2) 缓存的对象是否会在同一 rails 进程中的不同请求之间共享?
如果你在类中使用常量,又名
FILE = File.read(filename, 'rb').read
因此,它会在应用程序加载时进行评估。之后会发生分叉,因此它将在共享内存中。
这确实是有道理的。但是,这样做的限制是,如果为应用生成多个进程,则每个进程都必须缓存 1.4 MB。因此,您的第二个问题的答案是肯定的,但它不会在多个流程之间共享。