[英]Second Level Cache - Why not cache all entities?
根据我的经验,我通常使用共享缓存设置:
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
我的过程是考虑哪些实体不会经常更改,哪些实体将从缓存中获益,性能明智,并将其标记为@Cacheable
。 我使用选择性实体缓存的做法是一种学习惯例,但我并不完全理解这种方法。
为什么不缓存所有实体? 什么时候缓存所有实体会变得有害? 我怎样才能更好地衡量这一点,以做出更明智的决定?
一些不缓存实体的原因:
如果您使用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/
一般来说,我会缓存所有内容,只是限制缓存的大小。
希望这可以帮助。
为什么不缓存所有实体? 什么时候缓存所有实体会变得有害? 我怎样才能更好地衡量这一点,以做出更明智的决定?
一般来说,对于从缓存中受益的应用程序,应该主要读取数据。 这意味着每次写入/更新有多个读取。 如果不是这种情况,例如写入大多数或只写(想想温度计的采样数据),那么好处就不存在了,因为通过难以从内存中获取数据而不会产生任何节省。
要做出明智的决定,您可以缓存所有内容,然后查看缓存的命中/未命中率。 如果它很高(+ 70%),那么你就是在正确的轨道上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.