原标题:Spring认证中国教育管理中心-ApacheGeode的Spring数据教程六(Spring中国教育管理中心)5.5.15。客户区ApacheGeode支持用于管理和分发数据的各种部署拓扑。ApacheGeode拓扑的主题超出了本文档的范围。然而,快速回顾一下,ApacheGeode支持的拓扑结构可以分为:对等(p2p)、客户端-服务器和广域网(WAN)。在最后两个配置中,通常声明连接到缓存服务器的客户区域。ApacheGeode的SpringData通过其客户端缓存元素为每个配置提供专门的支持:客户端区域和池。顾名思义,client-region定义了一个客户区域,而pool定义了一个被各种客户区域使用的区域。和共享连接池。以下示例显示了典型的客户端区域配置:与其他区域类型一样,客户端区域支持CacheListener实例以及CacheLoader和CacheWriter。它还需要一个连接池来连接到一组定位器或服务器。每个客户区可以有自己的Pool,也可以共享同一个。如果未指定池,将使用“DEFAULT”池。在前面的示例中,Pool配置有定位器。定位器是一个独立的进程,用于在分布式系统中发现缓存服务器和对等数据成员,推荐用于生产系统。您还可以使用服务器元素将池配置为直接连接到一个或多个缓存服务器。有关要在客户端上设置的选项的完整列表,尤其是池,请参阅ApacheGeodeSchemaforSpringData(“SpringDataforApacheGeodeSchema”)和ApacheGeode文档以了解客户端-服务器配置。客户端的好处为了最小化网络流量,每个客户端都可以单独定义自己的“兴趣”策略,向ApacheGeode指示它实际需要的数据。在ApacheGeode的SpringData中,可以为每个客户区域单独定义“兴趣”。支持基于键和基于正则表达式的兴趣类型。以下示例显示了基于键和基于正则表达式的兴趣类型:特殊键,ALL_KEYS表示为所有键注册“兴趣”。使用正则表达式“.*”。键和正则表达式元素支持三个属性:持久、接收值和结果策略。durable指示当客户端连接到集群中的一个或多个服务器时为客户端创建的“兴趣”策略和订阅队列是否跨客户端会话维护。如果客户端离开并返回,当客户端断开连接时,持久会在客户端服务器上维护一个订阅队列。当客户端重新连接时,客户端会收到在客户端与集群中的服务器断开连接时发生的任何事件。为池客户端中定义的每个连接维护集群中服务器上的订阅队列,其中也为池“启用”订阅。订阅队列用于存储(并可能合并)发送给客户端的事件。如果订阅队列是持久的,它会在客户端会话(即连接)之间持续存在,可能会持续到指定的超时时间。如果客户端没有在给定的时间范围内返回,客户端池订阅队列将被销毁,以减少集群中服务器的资源消耗。如果订阅队列不是持久的,它会在客户端断开连接时立即销毁。您需要决定您的客户端是应该接收断开连接时发生的事件,还是仅接收重新连接后的最新事件。receive-values属性表示是否为创建和更新事件接收条目值。如果为真,则接收一个值。如果为false,则仅接收失效事件。最后,'result-policy'是一个枚举:KEYS、KEYS_VALUE和NONE。默认为KEYS_VALUES。result-policy这控制了客户端第一次连接时的初始转储以初始化本地缓存,本质上是一个事件,为客户端提供与感兴趣的策略匹配的所有条目。如前所述,如果不在池上启用订阅,客户兴趣注册就没有多大用处。事实上,在未启用订阅的情况下尝试注册兴趣是错误的。以下示例显示了如何执行此操作:...除了启用订阅,您还可以设置订阅确认间隔,订阅消息跟踪超时和订阅冗余。subscription-redundancy用于控制集群中的服务器应该维护多少个订阅队列副本。如果冗余大于1,并且“主”订阅队列(即服务器)发生故障,则“辅助”订阅队列接管,防止客户端在HA场景中丢失事件。除了Pool设置之外,服务器端区域还使用附加属性enable-subscription-conflation来控制发送到客户端的事件的合并。这也有助于进一步减少网络流量,并且在应用程序只关心条目的最新值的情况下很有用。但是,当应用程序保留事件发生时的时间序列时,合并会阻碍此用例。默认值为假。以下示例显示服务器上的区域配置,其客户端包含[CACHING_]PROXY对应的客户端区域对该服务器区域中的密钥感兴趣:...要控制在客户端与集群中的服务器断开连接后“持久”订阅队列维持的时间量(以秒为单位),请按如下方式设置元素Durable-client-上的超时属性:...关于客户端如何发挥作用和功能的深入讨论超出了本文档的范围。有关更多详细信息,请参阅ApacheGeode关于客户端到服务器事件分发的文档。5.5.16。JSON支持ApacheGeode支持在区域中缓存JSON文档,以及使用ApacheGeodeOQL(对象查询语言)查询存储的JSON文档的能力。通过使用JSONFormatter类执行与JSON文档之间的转换,JSON文档在内部存储为PdxInstance类型。StringSpringDataforApacheGeode提供了一个元素,使AOP组件能够建议适当的代理区域操作,它有效地封装了JSONFormatter,允许您的应用程序直接使用JSON字符字符串。此外,写入JSON配置区域的Java对象使用Jackson的ObjectMapper。当这些值被读回时,它们以JSON字符串的形式返回。默认情况下,对所有区域执行转换。要将此功能应用于选定区域,请在region-refs属性中提供以逗号分隔的区域beanID列表。其他属性包括pretty-print标志(默认为false)和convert-returned-collections。此外,默认情况下,getAll()和values()Region操作的结果会针对配置的区域进行转换。这是通过在本地内存中创建并行数据结构来完成的。对于大型集合,这可能会产生大量开销,因此如果要禁用这些区域设置操作的自动转换,请将convert-returned-collections设置为false。某些业务区域(尤其是那些使用Apache的Geode专利Region.Entry的区域,例如:entries(boolean)、entrySet(boolean)和getEntry()类型)没有AOP推荐。此外,entrySet()方法(返回Set>)不受影响。以下示例配置显示了如何设置pretty-print和convert-returned-collections属性:"false"/>如果将GemfireTemplate模板声明为Springbean,则此功能也可以与操作无缝配合。目前QueryService不支持原生操作。5.6.配置索引ApacheGeode允许在区域数据上创建索引(有时称为索引)以提高OQL(对象查询语言)查询的性能。在ApacheGeode的SpringData中,索引是使用index元素声明的,如下例所示:在SpringDataforApacheGeode的XMLSchema(也称为SDGXML命名空间)中,indexbean声明未绑定到区域,这与ApacheGeode的本机cache.xml不同。相反,它们是类似于的顶级元素。这允许您在任何区域声明任意数量的索引,无论它们是刚刚创建的还是已经存在——这是对ApacheGeode的本地cache.xml格式的重大改进。索引必须有一个名称。您可以使用name属性为索引指定一个显式名称。否则,bean定义的bean名称(即id属性的值)索引将用作Index名称。expression和from子句是索引表格的主要组成部分,标识要索引的数据(即,在标识的区域from子句中)以及用于索引数据的标准(即expression)。该表达式应该根据在应用程序定义的OQL谓词中使用哪些应用程序域对象字段来查询和查找存储在该区域中的对象来使用。考虑以下示例,它具有lastName属性:@Region("Customers")classCustomer{@IdLongid;StringlastName;StringfirstName;...}现在考虑以下示例,它有一个应用程序定义的SDG存储库来查询Customer对象:存储库查找器/查询方法生成并运行以下OQL语句:SELECT*FROM/CustomerscWHEREc。lastName='$1'因此,您可能希望创建类似于以下语句的索引:Spring认证中国教育管理中心-ApacheGeode的SpringData教程六from子句必须引用一个有效的现有区域,Index是如何将a应用到该区域的。这不是特定于ApacheGeode的SpringData。这是ApacheGeode的一个特性。Index类型可以是SpringData为Apache的Geode定义的一个IndexType枚举,具有三个枚举值:FUNCTIONAL、HASH和PRIMARY_KEY。每个枚举值都对应于实际创建(或“定义”——您可以在下一节中找到有关“定义”索引的更多信息)时调用的方法之一。例如,如果是,则调用QueryService.createKeyIndex(..)来创建。QueryServicecreate[|Key|Hash]IndexIndexIndexTypePRIMARY_KEYKEYKey索引默认为FUNCTIONAL并导致QueryService.createIndex(..)调用其中一种方法。有关完整的选项集,请参阅SpringDataforApacheGeodeXMLSchema。有关ApacheGeode中索引的更多信息,请参阅ApacheGeode用户指南中的“使用索引”。5.6.1.定义索引除了SpringDataforApacheGeode在Spring容器初始化时处理bean定义时预先创建索引外,您还可以使用define属性在创建它们之前定义所有应用程序索引,如下所示:当define设置为true时(默认为false),此时并不会真正创建Index。当SpringApplicationContext被“刷新”时,或者换句话说,当Spring容器发布ContextRefreshedEvent时,所有“定义的”索引都会创建一次。ApacheGeode的SpringData将自己注册为ApplicationListener作为ContextRefreshedEvent。触发时,ApacheGeode的SpringData调用QueryService.createDefinedIndexes()。定义索引和同时创建索引可以提高索引创建的速度和效率。