在 rails 中拥有持久内存哈希的最佳方式?
Best way to have a persistent in-memory hash in rails?
假设我有一个 table 的 100000 个城市(id,城市),并且我的应用程序的布局方式需要 id->city 映射才能进行许多搜索。 运行 每个此类翻译的 SQL 记录是禁止的。假设搜索结果页面显示 1000 条记录,我不想在现有查询之上添加 1000 SQL 个查询。
我读过有关预加载原语 (:includes) 的内容,但它并不完全符合我的需要。我想让这个 table 的 100000 个城市驻留在内存中。目前我正在尝试避免像redis这样的东西来避免依赖。
是否有共享内存区域,我可以在 rails/passenger 启动时将此散列 table 放入其中,然后所有传入请求都可以从那里查找此持久散列。
我相信如果我在 application_controller 中创建这样一个散列,每次收到请求时都会初始化这个散列,这会使事情变得比我现在拥有的更糟(或者不会吗?)
实例化所有请求都可以共享的共享持久内存的rails方法是什么?
听起来您需要缓存,您只是想避免使用外部服务器。我已将 Rails' 内置内存存储缓存解决方案用于全局有效的大型计算,但我不想往返于外部缓存。
在您的环境中使用和调整此设置。
config.cache_store = :memory_store, { size: 64.megabytes }
当然,Rails Caching Guide 包含所有详细信息。
假设我有一个 table 的 100000 个城市(id,城市),并且我的应用程序的布局方式需要 id->city 映射才能进行许多搜索。 运行 每个此类翻译的 SQL 记录是禁止的。假设搜索结果页面显示 1000 条记录,我不想在现有查询之上添加 1000 SQL 个查询。
我读过有关预加载原语 (:includes) 的内容,但它并不完全符合我的需要。我想让这个 table 的 100000 个城市驻留在内存中。目前我正在尝试避免像redis这样的东西来避免依赖。
是否有共享内存区域,我可以在 rails/passenger 启动时将此散列 table 放入其中,然后所有传入请求都可以从那里查找此持久散列。
我相信如果我在 application_controller 中创建这样一个散列,每次收到请求时都会初始化这个散列,这会使事情变得比我现在拥有的更糟(或者不会吗?)
实例化所有请求都可以共享的共享持久内存的rails方法是什么?
听起来您需要缓存,您只是想避免使用外部服务器。我已将 Rails' 内置内存存储缓存解决方案用于全局有效的大型计算,但我不想往返于外部缓存。
在您的环境中使用和调整此设置。
config.cache_store = :memory_store, { size: 64.megabytes }
当然,Rails Caching Guide 包含所有详细信息。