新手问题 想在 Rails 服务器启动后 load 进一部分的数据库数据

zealinux · 2018年04月09日 · 最后由 zealinux 回复于 2018年04月13日 · 1220 次阅读

问题是这样的:

有一大块数据是需要在服务启动的时候就 load 进来的, 这样在之后的地方就能够直接使用起来。

======

想象中的代码:

class A < ApplicationRecord
  belongs_to :person, optional: true

  @@preload_data ||= begin
   B.publish.to_a
  end

  def self.preload_data
    @@preload_data
  end
end

A.preload_data  # 服务起来后,这句还是会去查数据库

服务启动的时候对应的代码呢?难道你想加载 A 的代码的时候就去查询?

@nouse 是的,就这个想法

是想启动的时候加载缓存么?

config/initializer 目录加个文件,然后写上 A.preload_data 就可以吧

@xiangzi0037 是的,加载进缓存(数据进内存)

可以在 config/initializer 里进行,不过是不是装载到 redis 里更好

@gaolei14 装载到 redis/memcached 运算还是比较慢, 所以想到的方法是直接服务启动的时候加载到类变量内。

但也会有一个问题,不同的服务进程(puma)有内存数据同步的问题,暂时还没想到好的方法。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号