根据我的经验,我通常使用共享缓存设置:
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
我的过程是考虑哪些实体不会经常更改,哪些实体会从缓存中受益,性能明智,并将其标记为@Cacheable
。我使用选择性实体缓存的做法是一种学习惯例,但我并不完全理解这种方法。
为什么不缓存所有实体?什么时候缓存所有实体会变得有害?我怎样才能更好地衡量这一点,以做出更明智的决定?
答案 0 :(得分:3)
不缓存实体的一些原因:
答案 1 :(得分:0)
如果您使用ehcache作为提供商
<property key="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.region.factory_class">net.sf.ehcache.hibernate.EhCacheRegionFactory</property>
然后,您可以通过将ehcache.xml设置为根据需要逐出最少使用的实体来配置缓存以限制其使用的资源。
这里的好文章http://howtodoinjava.com/2013/07/04/hibernate-ehcache-configuration-tutorial/
一般来说,我会缓存所有内容,只是限制缓存的大小。
希望这有帮助。
答案 2 :(得分:0)
为什么不缓存所有实体?什么时候可以缓存所有实体成为一个 损害?我怎样才能更好地衡量这一点,以使他们受到更多教育 决定?
一般来说,对于受益于缓存的应用程序,应该主要读取数据。这意味着每次写入/更新有多个读取。如果不是这种情况,如写入 - 大多数或只写(想想温度计的采样数据),那么好处就不存在了,因为没有通过难以从内存中获取数据而产生的保存。
要做出明智的决定,您可以缓存所有内容,然后查看缓存的命中/未命中率。如果它很高(+ 70%),那么你就走在了正确的轨道上。