例如,DB记录是狗的品种.每个品种都有一个Dog父类和一个小孩类.实际的品种直到运行时都不知道.
当服务器开始时,它将加载数据库中的记录,并根据记录实例化类的实例.我可能有两只小猎犬和狮子狗.当有人来到服务器时,他们可能想要访问其中一个狗实例.
为什么不在飞行中创建实例?在我的情况下,“狗”基本上是持有算法和数据的类.该算法没有改变,数据很少变化(按天数排列),但是使用数据和一些时间戳等传递的动态数据的算法本身的执行次数将被多次访问.
要重新创建对象的一个实例,并且每次只是为了在下次请求中再次执行一个请求(请求不改变对象的状态)的请求时,重新创建一个实例是很愚蠢的.当我可以重新使用相同的对象时,我会创建并销毁多个对象.
在会话中保留它是没有意义的,因为有人想要长条狗不应该在她的会话对象中拥有beagles信息;这是无关紧要的(而不是缩放).
如何在内存中保留这些对象?我基本上想要一个查找表来保存实例.在Java中,我将创建一个单一的,具有某些类型的hashmap或数组,它们位于内存中.在rails中,我尝试通过在lib文件夹中创建一个单例类.我认为 – 我可能不会理解这个权利 – 当会议消失时,实例(这是一个单身性的事实是有道理的)正在丢失.
我发现最接近的答案是http://www.ruby-forum.com/topic/129372,它基本上把所有内容都放在课堂和方法中.不知何故似乎不对.
TIA!
另外:我来自Java.在Java中,我只是创建一个位于堆上的对象,也可以在JNDI树中创建一个对象,并且当HTTP请求进入时,它们将被一个servlet或EJB或一些每个请求项来处理,然后可以访问持久化对象.我似乎找不到相当的轨道.
解决方法
在生产模式下,类不是在请求之间卸载,而是这些类的实例.所以使用类的类成员听起来像是去找我的方式.只需使用它来存储你的实例.
class ObjectCache @@objects = {:beagle => Beagle.new,:poodle => Poodle.new} def lookup key @@objects[key.to_sym] end end