Oracle Coherence中文教程十七:缓存配置案例

时间:2022-08-28 07:40:38

存配置案例

本节提供了一系列的基本高速缓存方案的定义,可以使用或根据需要进行修改。参见第12章,配置高速缓存,详细说明如何配置缓存。此外,样品在本章建立在互相经常使用一个<scheme-ref>元件的重复使用其他的样品作为嵌套计划。使用的<scheme-ref>元素的详细信息,请参阅使用计划继承。最后,这些样品只指定最少数量的设置,按照嵌入式计划的文档的链接,看到的全套选项。

本节主要介绍配置以下缓存方案:

    本地缓存(可从单个JVM
        在内存缓存
        NIO的内存缓存
        大小限制在内存缓存
        内存中缓存窝条目
        磁盘上的缓存
        磁盘上缓存大小有限公司
        持续高速缓存磁盘
        内存与基于磁盘的缓存溢出
        数据库缓存

    集群缓存(可从多个JVM
        复制缓存
        复制缓存溢出
        分区的高速缓存
        分区的高速缓存溢出
        数据库分区的高速缓存
        分区的高速缓存与串行
        近缓存

17.1本地缓存(可从单一JVM 

本节定义一系列的本地缓存计划。在这种情况下的本地意味着缓存是直接访问单个JVM 。后来本文档中使用本地缓存的集群缓存积木。参见集群缓存(可从多个JVM ) 。

17.1.1内存中缓存

17-1使用本地计划,以定义在内存中缓存。缓存尽可能JVM堆允许存储。

17-1配置为本地,在内存中缓存

<local-scheme>

   <scheme-name>SampleMemoryScheme</scheme-name>

</local-scheme>

17.1.2NIO的内存缓存

17-2使用外部计划使用NIO的内存管理器定义在内存中缓存。 NIO的基于内存的缓存的优点是,它允许大的内存中缓存存储,而不会产生负面影响JVMGC倍。 NIO的内存区域的最大大小的高速缓存的大小是有限的。见<maximum-size>NIO的内存管理器的子元素。

17-2配置一个NIO的内存缓存

<external-scheme>

  <scheme-name>SampleNioMemoryScheme</scheme-name>

  <nio-memory-manager/>

</external-scheme>

17.1.3内存中缓存大小规模

添加一个子<high-units>元素为<local-scheme>限制的高速缓存的大小。在这里,高速缓存是几千个条目的大小限制。超过限制时,计划的<eviction-policy>的决定哪些元素从缓存中驱逐。

17-3配置一个大小有限,在内存中,本地缓存

<local-scheme>

   <scheme-name>SampleMemoryLimitedScheme</scheme-name>

   <high-units>1000</high-units>

</local-scheme>

17.1.4内存中缓存窝条目

添加一个子元素<local-scheme> <expiry-delay>的会导致缓存条目自动失效,如果他们没有更新,对于一个给定的时间间隔。当过期缓存条目无效,并从缓存中删除它。

17-4配置内存中缓存窝条目

<local-scheme>

   <scheme-name>SampleMemoryExpirationScheme</scheme-name>

   <expiry-delay>5m</expiry-delay>

</local-scheme>

17.1.5磁盘上缓存

17-5使用外部计划定义一个磁盘上的缓存。缓存存储尽可能多的文件系统允许。

注意事项:
这个例子使用了LH-文件管理器,其在磁盘上存储的实现。请参阅外部计划额外的外部存储选项。

17-5配置定义一个磁盘上缓存

<external-scheme>

  <scheme-name>SampleDiskScheme</scheme-name>

  <lh-file-manager/>

</external-scheme>

17.1.6磁盘上缓存大小限制

添加<high-units>子元素外部计划限制缓存的大小。缓存大小有限,一万个条目。超过限制时, LRU逐出用于确定哪些元素从缓存中驱逐。参照分页外部计划一个备用的大小有限的外部缓存方法。

17-6配置为一个磁盘上缓存大小限制

<external-scheme>

  <scheme-name>SampleDiskLimitedScheme</scheme-name>

  <lh-file-manager/>

  <high-units>1000000</high-units>

</external-scheme>

17.1.7持久性的磁盘上缓存

实施例17-7使用一个外部的方案来实现的高速缓存适于用作长期储存在一个单独的JVM 

外部高速缓存通常用于临时存储大型数据集,并且会自动删除JVM关机。外部缓存,可用于长期储存(见持久性(长期储存) ” )在非集群缓存时使用的LH -文件管理器或BDB存储管理器存储经理的。对于集群的持久性,请参阅分区的高速缓存数据库的样品。

{cache-name}宏是用来指定名称的文件数据存储中。这个宏的更多信息,请参阅使用参数宏” 

17-7持久磁盘上缓存的配置

<external-scheme>

  <scheme-name>SampleDiskPersistentScheme</scheme-name>

  <lh-file-manager>

    <directory>/my/storage/directory</directory>

    <file-name>{cache-name}.store</file-name>

  </lh-file-manager>

</external-scheme>

17-8说明使用Berkeley DB的,而LH 

17-8 Berkeley DB的持久磁盘上缓存的配置

<external-scheme>

  <scheme-name>SampleDiskPersistentScheme</scheme-name>

  <bdb-store-manager>

    <directory>/my/storage/directory</directory>

    <store-name>{cache-name}.store</store-name>

  </bdb-store-manager>

</external-scheme>

17.1.8在内存与磁盘高速缓存溢出

17-9使用溢出计划定义大小的内存高速缓存中,当内存中的( <front-scheme> )达到大小限制的限制,部分缓存的内容移动到磁盘上(<回计划) 。前计划的<eviction-policy>确定哪些元素从前面到后面移动。

请注意,这个例子重用大小磁盘上缓存有限公司磁盘缓存中的例子。来实现的高速缓存中的正面和背面。

17-9配置基于磁盘的内存中缓存溢出

<overflow-scheme>

  <scheme-name>SampleOverflowScheme</scheme-name>

  <front-scheme>

    <local-scheme>

      <scheme-ref>SampleMemoryLimitedScheme</scheme-ref>

    </local-scheme>

  </front-scheme>

  <back-scheme>

    <external-scheme>

      <scheme-ref>SampleDiskScheme</scheme-ref>

    </external-scheme>

  </back-scheme>

</overflow-scheme>

17.1.9缓存数据库

17-10使用一个可读写的后盾地图计划定义一个数据库缓存。此计划维护的数据库中的内容的一部分的本地缓存。读取高速缓存未命中到数据库,缓存写入写回数据库。

实现的com.tangosol.net.cache.CacheLoadercom.tangosol.net.cache.CacheStore接口配置了一个自定义类的缓存存储方案元素。这个类是负责所有对数据库的操作,如阅读和写作缓存条目。请参阅样本的缓存存储区实现写入缓存存储的例子。

{cache-name}宏是用来告知缓存存储实现缓存备份的名称。这个宏的更多信息,请参阅使用参数宏” 

17-10配置数据库缓存

<read-write-backing-map-scheme>

  <scheme-name>SampleDatabaseScheme</scheme-name>

  <internal-cache-scheme>

    <local-scheme>

      <scheme-ref>SampleMemoryScheme</scheme-ref>

    </local-scheme>

  </internal-cache-scheme>

  <cachestore-scheme>

    <class-scheme>

      <class-name>com.tangosol.examples.coherence.DBCacheStore</class-name>

      <init-params>

        <init-param>

          <param-type>java.lang.String</param-type>

          <param-value>{cache-name}</param-value>

        </init-param>

      </init-params>

    </class-scheme>

  </cachestore-scheme>

</read-write-backing-map-scheme>

17.2集群缓存(可从多个JVM 

本节定义了一系列的集群缓存的例子。集群缓存可从多个JVM (任何群集节点上运行相同的缓存服务) 。每个群集节点上的内部缓存存储(后备地图)的定义是使用本地缓存(见本地缓存(可从单一JVM ) ” ) 。缓存服务提供能力访问其他群集节点的本地缓存。

17.2.1复制缓存

17-11使用复制的计划元素,每个高速缓存条目的副本存储在所有群集节点上定义一个集群的缓存。

内存缓存中的示例是用来定义缓存存储在每个群集节点。高速缓存的大小仅受限于最小的JVM堆的群集节点。

17-11配置一个复制缓存

<replicated-scheme>

  <scheme-name>SampleReplicatedScheme</scheme-name>

  <backing-map-scheme>

    <local-scheme>

      <scheme-ref>SampleMemoryScheme</scheme-ref>

    </local-scheme>

  </backing-map-scheme>

</replicated-scheme>

17.2.2复制缓存溢出

后备地图计划元素可以很容易地指定的任何其他本地缓存样品。例如,如果使用的内存中缓存与基于磁盘的溢出” ,每个群集节点将有一个本地溢出缓存允许更大的存储容量。

17-12配置为复制缓存溢出

<replicated-scheme>

  <scheme-name>SampleReplicatedOverflowScheme</scheme-name>

  <backing-map-scheme>

     <overflow-scheme>

        <scheme-ref>SampleOverflowScheme</scheme-ref>

     </overflow-scheme>

  </backing-map-scheme>

</replicated-scheme>

17.2.3分区的高速缓存

17-13采用分布式方案,定义一个集群的缓存,缓存存储在所有群集节点分区。

内存缓存是用来定义缓存存储在每个群集节点。高速缓存的总容量是所有存储功能的群集节点运行分区的高速缓存服务的总和。见<local-storage>的子元素的分布式计划” 

17-13分区缓存配置

<distributed-scheme>

  <scheme-name>SamplePartitionedScheme</scheme-name>

  <backing-map-scheme>

    <local-scheme>

      <scheme-ref>SampleMemoryScheme</scheme-ref>

    </local-scheme>

  </backing-map-scheme>

</distributed-scheme>

17.2.4分区的高速缓存溢出

后备地图计划元素可以很容易地指定的任何其他本地缓存样品。举例来说,如果它使用了基于磁盘溢出内存缓存,每个存储功能的群集节点将有一个本地溢出缓存允许更大的存储容量。需要注意的是缓存的备份存储也使用相同的溢出计划,允许备份数据到磁盘溢出。

17-14配置一个分区的高速缓存溢出
<distributed-scheme>

  <scheme-name>SamplePartitionedOverflowScheme</scheme-name>

  <backing-map-scheme>

    <overflow-scheme>

      <scheme-ref>SampleOverflowScheme</scheme-ref>

    </overflow-scheme>

  </backing-map-scheme>

  <backup-storage>

    <type>scheme</type>

    <scheme-name>SampleOverflowScheme</scheme-name>

  </backup-storage>

</distributed-scheme>

17.2.5分区的高速缓存数据库

切换后备地图计划元素使用一个可读写的后盾地图计划允许缓存来装入和存储对外部源(如数据库)的条目。

17-15重用的缓存来定义的数据库访问数据库。

17-15一个数据库分区的高速缓存配置

<distributed-scheme>

  <scheme-name>SamplePartitionedDatabaseScheme</scheme-name>

  <backing-map-scheme>

    <read-write-backing-map-scheme>

      <scheme-ref>SampleDatabaseScheme</scheme-ref>

    </read-write-backing-map-scheme>

  </backing-map-scheme>

</distributed-scheme>

17.2.6分区的高速缓存与串行

17-16采用分布式方案,用于序列化和反序列化的用户类型定义一个序列的序列化元素。在这种情况下,分区的高速缓存使用POF ( ConfigurablePofContext )作为其序列化格式。请注意,如果您使用的POF和您的应用程序使用任何用户自定义类型的类,那么你也必须定义一个定制的POF配置为他们。请参阅附录, POF元素的更多信息的的“ POF用户类型的配置元素” 

示例17-16配置一个分区的高速缓存与串行

<distributed-scheme>

  <scheme-name>SamplePartitionedPofScheme</scheme-name>

  <service-name>PartitionedPofCache</service-name>

  <serializer>

    <instance>

      <class-name>com.tangosol.io.pof.ConfigurablePofContext</class-name>

    </instance>

  </serializer>

  <backing-map-scheme>

    <local-scheme/>

  </backing-map-scheme>

  <autostart>true</autostart>

</distributed-scheme>

序列化在 tangosol-coherence.xml的部署描述符中定义的串行器也可以被引用。

17-17分区的高速缓存,串行参考

<distributed-scheme>

  <scheme-name>SamplePartitionedPofScheme</scheme-name>

  <service-name>PartitionedPofCache</service-name>

  <serializer>pof</serializer>

  <backing-map-scheme>

    <local-scheme/>

  </backing-map-scheme>

  <autostart>true</autostart>

</distributed-scheme>


17-18定义默认串行

<?xml version='1.0'?>

<cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config"

   xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config

   coherence-cache-config.xsd">

   <defaults>

      <serializer>pof</serializer>

   </defaults>

   ...

17.2.7近缓存

17-19使用近计划定义一个本地内存缓存分区的高速缓存的一个子集。其结果是,任何群集节点访问分区的高速缓存保持元素经常访问的本地副本。这提供了复制的计划基于缓存的读取性能接近,同时提供高可扩展性的基于分布式方案缓存。

内存缓存样本大小有限公司重用定义的” ( <front-scheme> )缓存,同时重新定义分区的高速缓存样品近计划。

请注意,前计划的大小有限的配置多少背面计划缓存本地缓存中指定的限制。

17-19的本地缓存分区缓存配置

<near-scheme>

  <scheme-name>SampleNearScheme</scheme-name>

  <front-scheme>

    <local-scheme>

       <scheme-ref>SampleLimitedMemoryScheme</scheme-ref>

    </local-scheme>

  </front-scheme>

  <back-scheme>

    <distributed-scheme>

      <scheme-ref>SamplePartitionedScheme</scheme-ref>

    </distributed-scheme>

  </back-scheme>

</near-scheme>