Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails中使用只读记忆类变量_Ruby On Rails_Multithreading_Class_Global Variables_Memoization - Fatal编程技术网

Ruby on rails 在Rails中使用只读记忆类变量

Ruby on rails 在Rails中使用只读记忆类变量,ruby-on-rails,multithreading,class,global-variables,memoization,Ruby On Rails,Multithreading,Class,Global Variables,Memoization,我有一个rails应用程序,它有一个简单的类,叫做营养素。这涉及到一个包含大约150个营养项目和一些少量信息的表格。此数据在应用程序使用期间不会更改。由于这些项目使用得相当频繁,而且数据的总大小很小,我真的希望在内存中不断维护它们(以减少不必要的数据库或缓存访问) 因此,我研究了如何使用课堂记忆技术,即: class Nutrient < ApplicationRecord def self.all_cached @@all_nutrients ||= Nutrient.al

我有一个rails应用程序,它有一个简单的类,叫做营养素。这涉及到一个包含大约150个营养项目和一些少量信息的表格。此数据在应用程序使用期间不会更改。由于这些项目使用得相当频繁,而且数据的总大小很小,我真的希望在内存中不断维护它们(以减少不必要的数据库或缓存访问)

因此,我研究了如何使用课堂记忆技术,即:

class Nutrient < ApplicationRecord

  def self.all_cached
    @@all_nutrients ||= Nutrient.all.to_a
  end

end
class
在live rails应用程序中这样做安全吗?我担心线程的安全性,可能让不同的进程访问同一个阵列会降低速度或导致崩溃。
此营养素列表在应用程序启动后不会更改或变异。

您使用这些值执行哪些控制器操作。不如将这些值存储在redis中,然后向redis查询这些值,这样做既快速又避免了对数据库的影响。在整个应用程序中,它们被大量不同的操作所使用。是的,所以这肯定是另一种选择,但在redis永远不会改变的时候,甚至去redis似乎都没有必要。毕竟,这仍然会比服务器上的内存慢得多。您查看了这个答案了吗?谢谢,但这仍然不能完全解决这个问题。会议绝对不是举行会议的场所。我想弄清楚的是,当多进程rails应用程序为只读时,您是否可以在其中安全地使用类变量,或者这会导致阻塞和并发崩溃。否则,我当然可以使用redis缓存,但最好知道,无论哪种方式,我都会在试图记忆类或类实例变量以跨请求缓存时遇到奇怪的、零星的错误,所以我避免了它。我使用Rails.cache.fetch跨请求缓存原语。但是没有ActiveRecord结果的答案。您使用这些值执行哪些控制器操作。不如将这些值存储在redis中,然后向redis查询这些值,这样做既快速又避免了对数据库的影响。在整个应用程序中,它们被大量不同的操作所使用。是的,所以这肯定是另一种选择,但在redis永远不会改变的时候,甚至去redis似乎都没有必要。毕竟,这仍然会比服务器上的内存慢得多。您查看了这个答案了吗?谢谢,但这仍然不能完全解决这个问题。会议绝对不是举行会议的场所。我想弄清楚的是,当多进程rails应用程序为只读时,您是否可以在其中安全地使用类变量,或者这会导致阻塞和并发崩溃。否则,我当然可以使用redis缓存,但最好知道,无论哪种方式,我都会在试图记忆类或类实例变量以跨请求缓存时遇到奇怪的、零星的错误,所以我避免了它。我使用Rails.cache.fetch跨请求缓存原语。但是没有ActiveRecord结果的答案。