在我的应用程序中,只有一个当前事件默认为最近的日期事件。我需要在各个地方检索此事件,因为它没有改变,所以缓存它是有意义的。有两种方法可以让我知道:
class Event < ActiveRecord::Base
CURRENT_EVENT = Event.where('starts_on >= ?', Time.now).
order('starts_on ASC').limit(1).first
# OR
def self.current_event
@@current_event ||= Event.where('starts_on >= ?', Time.now).
order('starts_on ASC').limit(1).first
end
end
哪一个最好?还是其他任何选择?我知道不推荐使用@@类变量,因为它们不是线程安全的。
答案 0 :(得分:1)
我猜你的方法不对:这样你的应用就会永远保持你的缓存价值。新的events
不会影响它,这是完全错误的。可能是某些事件已经过去但仍然被缓存为“当前”的情况。
顺便说一句:limit(1).first
与唯一的first
相同。
答案 1 :(得分:1)
第一种方法和第二种方法都不正确。如果你定义常量 - 它将在Rails初始化过程时间找到Event,实际上。第二种方法不会cache
您的记录。
至于我,这不是那么胖数据缓存。