我有一些对象。出于性能原因,我无法将其存储在DB中。我在Global($ var)和Class(@@ var)变量(在控制器中)中尝试了存储数组,但它对于所有用户来说都是相同的数组。它应该对每个用户会话都是唯一的,并且在每个会话中都应该能够快速修改。
我理解会话[] - 不是最佳解决方案。什么是最好的方式?
在控制器中执行操作时,我每次都会执行类似$lines_rules << Processing::rule_creator(...)
的操作。
$ lines_rules - 这是我的对象数组。
为什么DB不适合商店$ lines_rules?在$ lines_rules中,我使用lambda函数存储对象。当用户按下按钮时,我需要用用户输入调用每个lambda函数并保持结果。然后我将新对象加载到$ lines_rules中。因此,每个请求都会更改$ lines_rules。我认为使用记忆是更好的表现方式。
更新
我使用$global_hash [ session[:session_id] ]
和这种技术来节省资源:
def dead_sessions_killer
ActiveRecord::SessionStore::Session.where(["updated_at < ?", 30.minutes.ago]).each do |session|
$global_hash.delete_if {|key, value| key == session.session_id }
session.delete
end
end
答案 0 :(得分:1)
使用全局但全局的哈希,用户的会话ID键入。
在那里存储你想要的任何东西,虽然有适当的缓存,很难说这是不是一个好主意。
答案 1 :(得分:0)
您可以将数组声明为类变量(仅1个@符号),并提供访问器方法。
那是:
class Foo
@some_array
def some_array
@some_array
end
end
从其他类中,这可以让您调用foo_instance.some_array
,这会使数组保持特定于用户,但允许来自任何类的公共访问。
答案 2 :(得分:0)
您可以使用memcache将用户会话存储在内存中。这将是方便和快速的。
http://awesomerails.wordpress.com/2011/08/23/rails-3-memcached-session-store/