原标题:Spring认证中国教育管理中心-ApacheGeode的SpringData教程四(Spring中国教育管理中心)5.5.4。压缩ApacheGeode区域也可以压缩以减少JVM内存消耗和压力,可能避免全局GC。当你为一个区域启用压缩时,存储在该区域内存中的所有值都会被压缩,而键和索引保持未压缩状态。新值放入Region时被压缩,所有值从Region读回时自动解压。当保存到磁盘或通过网络发送给其他对等成员或客户端时,值不会被压缩。以下示例显示了启用压缩的区域:有关区域压缩的更多信息,请参阅ApacheGeode的文档。5.5.5。堆外ApacheGeode区域也可以配置为将区域值存储在堆外内存中,这是JVM内存的一部分,不受垃圾收集(GC)的影响。通过避免昂贵的GC周期,您的应用程序可以将更多时间花在处理请求等重要事情上。使用堆外内存就像声明您要使用的内存量然后使您的区域能够使用堆外内存一样简单,如以下配置所示:200G您可以通过使用元素设置以下ApacheGeode配置属性来控制堆外内存管理的其他方面:sApacheGeodeResourceManager将使用这两个阈值(critical-off-heap-percentage&eviction-off-heap-percentage)以与JVM在管理堆内存时做的。ApacheGeodeResourceManager将通过驱逐旧数据来防止缓存消耗过多的堆外内存。如果堆外管理器跟不上,ResourceManager将拒绝添加到缓存,直到堆外内存管理器释放足够的内存。有关管理堆内存和堆外内存的更多信息,请参阅ApacheGeode的文档。具体来说,请阅读“管理堆外内存”部分。5.5.6.分区域SpringDataforApacheGeode也支持分区域,允许按层次关系排列区域。例如,ApacheGeode允许一个/Customer/Address区域和一个不同的/Employee/Address区域。此外,一个子区域可能有自己的子区域和配置。子区域不从其父区域继承属性。受ApacheGeode约束,区域类型可以混合和匹配。Sub-Region自然声明为Region的子元素。子区域的名称属性只是名称。前面的示例可能配置如下:请注意,子区域不允许使用Monospaced([id])属性。子区域是使用bean名称创建的(在此示例中分别为/Customer/Address和/Employee/Address)。因此,它们可能会被GemfireTemplate注入到其他需要它们的应用程序bean中,例如,通过使用区域的完整路径名。区域的完整路径名也应该用在OQL查询字符串中。5.5.7.区域模板SpringDataforApacheGeode也支持区域模板。此功能允许开发人员一次性定义公共区域配置和属性,并在SpringApplicationContext中声明的多个区域bean定义中重用该配置。ApacheGeode的SpringData在其命名空间中包含五个区域模板标签:区域从中继承其配置的区域模板。区域模板甚至可以继承自其他区域模板。以下示例显示了一种可能的配置:Spring认证中国教育管理中心-ApacheGeode的SpringData教程四大区模板也适用于分大区请注意,“TemplateBasedPartitionRegion”扩展了“PartitionRegionTemplate”,后者扩展了“ExtendedRegionTemplate”,后者扩展了“BaseRegionTemplate”。在后续继承的Regionbean定义中定义的属性和子元素会覆盖父元素中的那些。模板的工作原理SpringDataforApacheGeode在ApplicationContext解析Spring配置元数据时应用Region模板,因此Region模板必须按照继承的顺序声明。换句话说,父模板必须在子模板之前定义。这样做可以确保应用正确的配置,尤其是在覆盖元素属性或子元素时。同样重要的是要记住,区域类型只能从其他类似类型的区域继承。例如,不可能继承自。区域模板是单继承的。Regions、Subregions和Lookups注意事项之前replicated-region、partitioned-region、local-region、client-region的基本属性之一是Spring中对数据元素的ApacheGeodeXML命名空间的首次尝试lookup是在创建区域之前执行。如果Region已经存在,则执行此操作,如果Region是在导入的ApacheGeode本机cache.xml配置文件中定义的,则会出现这种情况。因此,请先执行查找以避免任何错误。这是设计使然,可能会发生变化。此行为已更改,现在默认为先创建区域。如果Region已经存在,创建逻辑会很快失败并抛出一个适当的异常。但是,与CREATETABLEIFNOTEXISTS...DDL语法非常相似,ApacheGeodeXML命名空间元素的SpringData现在包含一个ignore-if-exists属性,该属性通过首先执行Lookupsfor按名称标识的现有区域以恢复旧行为。如果通过名称找到现有区域并将ignore-if-exists设置为true,则忽略Spring配置中定义的区域bean定义。Spring团队强烈建议仅使用replicated-region、partitioned-region、local-region和client-regionXML命名空间元素来定义新区域。当由这些元素定义的Region已经存在并且Region元素首先执行查找时可能出现的一个问题是,如果您在应用程序配置中为驱逐、过期、订阅等定义不同的Region语义和行为,那么Region定义可能不匹配,并且可能表现出与应用程序要求的行为相反的行为。更糟糕的是,您可能希望将区域定义为分布式区域(例如PARTITION),而实际上现有区域定义只是本地的。推荐做法-仅使用复制区域、分区区域、本地区域和客户端区域XML命名空间元素来定义新区域。考虑以下本机ApacheGeodecache.xml配置文件:此外,考虑到您可能已经定义了一个应用程序DAO,如下所示:publicclassCustomerAccountDaoextendsGemDaoSupport{@Resource(name="Customers/Accounts")privateRegioncustomersAccounts;...}在这里,我们的Customers/Accounts在应用程序DAO中注入了对区域的引用。因此,开发人员在SpringXML配置元数据中为部分或全部这些区域定义beans的情况并不少见,如下所示:Customers/Accounts和Customers/Accounts/Orders区域在Spring容器中被引用为beans,例如分别为客户/账户和客户/账户/订单。使用lookup-region元素和相应语法(如前所述)的好处是,它允许您直接引用子区域,而无需为父区域(在本例中为Customers)定义bean。考虑以下不正确的示例,它将配置元数据语法更改为使用嵌套格式:现在考虑另一个不好的例子,它使用设置了ignore-if-exists属性的顶级replicated-region元素来首先执行查找:区域定义于SpringbeansApplicationContext包括以下内容:{"Customers","/Customers/Accounts","/Customers/Accounts/Orders"}。这意味着前面示例中显示的依赖项注入引用(即@Resource(name="Customers/Accounts"))现在已损坏,因为Customers/Accounts实际上并未定义名称为的bean。因此,您不应像前面两个示例中所示那样配置区域。ApacheGeode可以灵活地引用带或不带前导斜杠的父区域和子区域。例如,父项可以引用为/Customers或Customers,子项可以引用为/Customers/Accounts或Customers/Accounts。但是,ApacheGeode的SpringData在以区域命名bean时非常具体。它始终使用正斜杠(/)来指示子区域(例如/Customers/Accounts)。因此,您应该使用前面显示的非嵌套语法为lookup-region或使用前导正斜杠(/)定义直接引用,如下所示:前面的示例中,嵌套的复制区域元素用于引用子区域,显示了前面描述的问题。客户、帐户和订单字段和子字段是否持久?它们不是持久的,因为区域是在本地ApacheGeodecache.xml配置文件中定义的,REPLICATE并且在缓存bean初始化之前就存在(一旦元素被处理)。5.5.8.数据逐出(溢出)基于各种约束,每个区域都可以有一个用于从内存中逐出数据的逐出策略。目前,在ApacheGeode中,逐出适用于最近最少使用的条目(也称为LRU)。逐出的条目要么被销毁,要么被分页到磁盘(称为“溢出到磁盘”)。ApacheGeode的SpringData通过使用嵌套驱逐元素支持分区区域、复制区域和客户端、本地区域的所有驱逐策略(条目计数、内存和堆使用)。例如,要配置一个PARTITIONRegion在内存大小超过512MB时溢出到磁盘,您可以指定以下配置:"512"action="OVERFLOW_TO_DISK"/>不能使用本地销毁来驱逐副本,因为这会使它们无效。有关详细信息,请参阅ApacheGeode文档。为溢出配置区域时,您应该通过disk-store元素配置存储以获得最大效率。有关逐出策略的详细说明,请参阅关于逐出的ApacheGeode文档。