根据我的经验,我通常使用共享缓存设置:
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>然后,我的流程是考虑哪些实体不需要经常更改,以及那些从缓存中获益的实体,从性能上考虑,并将这些实体标记为@Cacheable。我使用选择性实体缓存的实践是一种学习习惯,但我并不完全理解这种方法。
为什么不缓存所有实体?什么时候缓存所有实体会成为一种损害?我怎样才能更好地判断这一点,从而做出更有教养的决定呢?
发布于 2016-01-21 16:14:04
不缓存实体的一些原因如下:
发布于 2016-01-21 15:50:52
如果您使用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/
一般来说,我会缓存所有的东西,只是限制缓存的大小。
希望这能有所帮助。
发布于 2016-01-24 08:53:47
为什么不缓存所有实体?什么时候缓存所有实体会成为一种损害?我怎样才能更好地判断这一点,从而做出更有教养的决定呢?
一般来说,应用程序要想从缓存中获益,就应该读取数据--主要是读取数据。这意味着每次写入/更新都有多个读取。如果不是这种情况,比如只写或只写(比如从温度计中取样数据),那么好处就不存在了,因为难以从内存中读取数据并不能节省开支。
要做出明智的决定,您可以缓存所有内容,然后查看缓存的命中率/误命中率。如果它是高的(+70%),那么你是在正确的轨道上。
https://stackoverflow.com/questions/34927713
复制相似问题