📄 performance.html
字号:
</h3></div></div><div></div></div><p> 类或者集合映射的“<tt class="literal"><cache></tt>元素”可以有下列形式: </p><div class="programlistingco"><pre class="programlisting"><cache usage="transactional|read-write|nonstrict-read-write|read-only" <span class="co">(1)</span> region="RegionName" <span class="co">(2)</span> include="all|non-lazy" <span class="co">(3)</span>/></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left">(1)</td><td valign="top" align="left"><p> <tt class="literal">usage</tt>(必须)说明了缓存的策略: <tt class="literal">transactional</tt>、 <tt class="literal">read-write</tt>、 <tt class="literal">nonstrict-read-write</tt>或 <tt class="literal">read-only</tt>。 </p></td></tr><tr><td width="5%" valign="top" align="left">(2)</td><td valign="top" align="left"><p> <tt class="literal">region</tt> (可选, 默认为类或者集合的名字(class or collection role name)) 指定第二级缓存的区域名(name of the second level cache region) </p></td></tr><tr><td width="5%" valign="top" align="left">(3)</td><td valign="top" align="left"><p> <tt class="literal">include</tt> (可选,默认为 <tt class="literal">all</tt>) <tt class="literal">non-lazy</tt> 当属性级延迟抓取打开时, 标记为<tt class="literal">lazy="true"</tt>的实体的属性可能无法被缓存 </p></td></tr></table></div></div><p> 另外(首选?), 你可以在hibernate.cfg.xml中指定<tt class="literal"><class-cache></tt>和 <tt class="literal"><collection-cache></tt> 元素。 </p><p> 这里的<tt class="literal">usage</tt> 属性指明了<span class="emphasis"><em>缓存并发策略(cache concurrency strategy)</em></span>。 </p></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="performance-cache-readonly"></a>19.2.2. 策略:只读缓存(Strategy: read only) </h3></div></div><div></div></div><p> 如果你的应用程序只需读取一个持久化类的实例,而无需对其修改, 那么就可以对其进行<tt class="literal">只读</tt> 缓存。这是最简单,也是实用性最好的方法。甚至在集群中,它也能完美地运作。 </p><pre class="programlisting"><class name="eg.Immutable" mutable="false"> <cache usage="read-only"/> ....</class></pre></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="performance-cache-readwrite"></a>19.2.3. 策略:读/写缓存(Strategy: read/write) </h3></div></div><div></div></div><p> 如果应用程序需要更新数据,那么使用<tt class="literal">读/写缓存</tt> 比较合适。 如果应用程序要求“序列化事务”的隔离级别(serializable transaction isolation level),那么就决不能使用这种缓存策略。 如果在JTA环境中使用缓存,你必须指定<tt class="literal">hibernate.transaction.manager_lookup_class</tt>属性的值, 通过它,Hibernate才能知道该应用程序中JTA的<tt class="literal">TransactionManager</tt>的具体策略。 在其它环境中,你必须保证在<tt class="literal">Session.close()</tt>、或<tt class="literal">Session.disconnect()</tt>调用前, 整个事务已经结束。 如果你想在集群环境中使用此策略,你必须保证底层的缓存实现支持锁定(locking)。Hibernate内置的缓存策略并不支持锁定功能。 </p><pre class="programlisting"><class name="eg.Cat" .... > <cache usage="read-write"/> .... <set name="kittens" ... > <cache usage="read-write"/> .... </set></class></pre></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="performance-cache-nonstrict"></a>19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) </h3></div></div><div></div></div><p> 如果应用程序只偶尔需要更新数据(也就是说,两个事务同时更新同一记录的情况很不常见),也不需要十分严格的事务隔离, 那么比较适合使用<tt class="literal">非严格读/写缓存</tt>策略。如果在JTA环境中使用该策略, 你必须为其指定<tt class="literal">hibernate.transaction.manager_lookup_class</tt>属性的值, 在其它环境中,你必须保证在<tt class="literal">Session.close()</tt>、或<tt class="literal">Session.disconnect()</tt>调用前, 整个事务已经结束。 </p></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="performance-cache-transactional"></a>19.2.5. 策略:事务缓存(transactional) </h3></div></div><div></div></div><p> Hibernate的<tt class="literal">事务缓存</tt>策略提供了全事务的缓存支持, 例如对JBoss TreeCache的支持。这样的缓存只能用于JTA环境中,你必须指定 为其<tt class="literal">hibernate.transaction.manager_lookup_class</tt>属性。 </p></div><p> 没有一种缓存提供商能够支持上列的所有缓存并发策略。下表中列出了各种提供器、及其各自适用的并发策略。 </p><div class="table"><a name="d0e14570"></a><p class="title"><b>表 19.2. 各种缓存提供商对缓存并发策略的支持情况(Cache Concurrency Strategy Support) </b></p><table summary="
 各种缓存提供商对缓存并发策略的支持情况(Cache Concurrency Strategy Support)
 " border="1"><colgroup><col align="left"><col align="left"><col align="left"><col align="left"><col align="left"></colgroup><thead><tr><th align="left">Cache</th><th align="left">read-only</th><th align="left">nonstrict-read-write</th><th align="left">read-write</th><th align="left">transactional</th></tr></thead><tbody><tr><td align="left">Hashtable (not intended for production use)</td><td align="left">yes</td><td align="left">yes</td><td align="left">yes</td><td align="left"> </td></tr><tr><td align="left">EHCache</td><td align="left">yes</td><td align="left">yes</td><td align="left">yes</td><td align="left"> </td></tr><tr><td align="left">OSCache</td><td align="left">yes</td><td align="left">yes</td><td align="left">yes</td><td align="left"> </td></tr><tr><td align="left">SwarmCache</td><td align="left">yes</td><td align="left">yes</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">JBoss TreeCache</td><td align="left">yes</td><td align="left"> </td><td align="left"> </td><td align="left">yes</td></tr></tbody></table></div></div><div class="sect1" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="performance-sessioncache"></a>19.3. 管理缓存(Managing the caches) </h2></div></div><div></div></div><p> 无论何时,当你给<tt class="literal">save()</tt>、<tt class="literal">update()</tt>或 <tt class="literal">saveOrUpdate()</tt>方法传递一个对象时,或使用<tt class="literal">load()</tt>、 <tt class="literal">get()</tt>、<tt class="literal">list()</tt>、<tt class="literal">iterate()</tt> 或<tt class="literal">scroll()</tt>方法获得一个对象时, &#
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -