如何通过id缓存查找对象

Joe*_*Joe 5 hibernate ruby-on-rails dalli

select * from Foo where id = 200
Run Code Online (Sandbox Code Playgroud)

如何通过id缓存查找对象,因为我们观察到一直在某个id上进行select调用.我们应该如何以非突兀的方式在rails中启用它,以便我们可以在将来的任何缓存存储之间切换(比如memcached或redis)

编辑:

与基于Hibernate的缓存策略非常类似, org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE后者适用于Java EE中的所有Entity类.

joh*_*oht 2

您可以简单地使用rails的内置缓存

Rails.cache.fetch :cache_id_here, :expires_in => 1.days do
   Model.find(id)
end
Run Code Online (Sandbox Code Playgroud)

:cache_id_here根据您的需要进行更改,并根据您的喜好设置到期时间。您可以将此缓存与 memcached 或您想要的任何替代缓存存储一起使用。您只需在应用程序配置中进行设置即可。

更新

我正在开发一个 gem,它通过扩展 Rail 的 .find 和 .save 方法以及缓存结果来解决这个问题。它是超级测试版,尚未在生产中进行测试,但如果您愿意尝试一下,请查看存储库: https: //github.com/johnkoht/cache-money-millionaire并让我知道您的想法。

本质上,如果您调用,Post.find(3)它会自动查找并创建一个缓存版本,其中的缓存键Post 3将在保存或触摸时自动更新。就像我说的,它是测试版,但它解决了问题。