在 Ruby On Rails 中的类变量中缓存文件



在我的 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。因此,您的第二个问题的答案是肯定的,但它不会在多个流程之间共享。

最新更新