如图:
第一次已经缓存住结果了。第二次取出时,为什么会再次 selec 呢?
ps:已经上 google,stackoverflow,还是找不到原因。
@huacnlee, @lgn21st, @Rei
开发环境?生产环境才会缓存。
结果集是 lazy loading 的,直到结果集被遍历,才会发送 SQL 语句,所以你缓存的时候是一个空结果集。正确做法是强制 eager loading:
Rails.cache.fetch("top10") { Job.limit(10).all }
用 all 强制 eager loading。
十分感谢 2 位的解答
这个跟开发环境貌似没什么关联,用的 rails console production 也是一样。
按照@robbin 说的加个 all,果断就解决问题了。 困扰了一个晚上的疑惑,明白了开心啊。