gpt4 book ai didi

java - 具有分布式返回方案和本地存储设置的 Coherence Near 缓存

转载 作者:行者123 更新时间:2023-11-30 09:11:51 25 4
gpt4 key购买 nike

我使用 Coherence 12.1.2.0.0

我的系统拓扑结构是:三个节点有应用程序(缓存客户端)和具有大量内存的独立缓存服务器。

我的目标是创建不完全依赖于缓存服务器并且同时在应用程序服务器上消耗严格内存的缓存系统。所以我想存储所有曾经缓存在缓存服务器上的值。但是,如果缓存服务器不工作,应用程序仍然可以使用它们的小型本地缓存运行。

我认为 Near 缓存是我需要的。它由作为前端的本地方案和作为后端方案的分布式缓存组成。但是,当我在客户端的分布式部分将本地存储设置设置为 false 时,即使使用前端本地缓存我也无法操作,因为每次放置操作都会出现“不存在启用本地存储的节点”错误。如果我将 local-storage 设置为 true 并将本地存储内存限制为例如 1 个单元缓存服务器不会从客户端接收放置的值。更准确地说,它接收其中的一些但不是全部。例如,如果我执行“put 1 1”并多次获取它,然后尝试“put 2 2”和“put 4 4”,我永远不会在缓存服务器上同时获取“2 2”和“4 4”。在这种情况下,缓存服务器包含“1 1”并且可能是值“2 2”或“4 4”之一,但绝不会同时出现所有三对。

我在内部部分尝试了使用直接本地方案的 backing-map-scheme 和使用本地方案的读写支持映射方案。结果是一样的。这是我的大概测试配置:

    <near-scheme>
<scheme-name>near</scheme-name>
<front-scheme>
<local-scheme>
<scheme-ref>local</scheme-ref>
</local-scheme>
</front-scheme>
<back-scheme>
<distributed-scheme>
<scheme-ref>distributed</scheme-ref>
</distributed-scheme>
</back-scheme>
<invalidation-strategy>all</invalidation-strategy>
</near-scheme>

<distributed-scheme>
<scheme-name>distributed</scheme-name>
<service-name>DistributedCache</service-name>
<local-storage>false</local-storage>
<backing-map-scheme>
<local-scheme>
<scheme-ref>local-binary</scheme-ref>
</local-scheme>
</backing-map-scheme>
<autostart>true</autostart>
</distributed-scheme>

<local-scheme>
<scheme-name>local</scheme-name>
<eviction-policy>HYBRID</eviction-policy>
<high-units>1</high-units>
<unit-calculator>FIXED</unit-calculator>
<expiry-delay>{expiry 1h}</expiry-delay>
</local-scheme>

<local-scheme>
<scheme-name>local-binary</scheme-name>
<eviction-policy>HYBRID</eviction-policy>
<high-units>300</high-units>
<unit-calculator>BINARY</unit-calculator>
<expiry-delay>{expiry 1h}</expiry-delay>
</local-scheme>

我需要什么方案?

最佳答案

您尝试使用的功能不存在。 Oracle Coherence 允许您在应用程序端定义近缓存,但它必须得到远缓存服务器的支持。没有它,您将无法保存任何东西。靠近缓存的客户端需要它的服务器端作为一个大数据库进行交互,以加载和更新从应用程序接收到的数据。您仅针对第 1 组单元尝试的技巧也是错误的。每个客户端都试图自己更新这些值。这里的问题是,当客户端“A”发送更新而“B”也发送时,其中一个是之前收到的(您不知道是哪个),另一个被标记为无效。然后,如果您在缓存 1 1 中有“A”发送 2 2 和“B”发送 3 3,其中一个(即 3 3)将保留并且 2 2 将被标记为无效,因为 1 1 位于假设的一侧'C'。您正在滥用近缓存的功能 - 它不是为此指定的。 Coherence 是一个可靠的缓存,如果服务器端不工作,你的应用程序也不会。如果您有时需要使用远程服务器更新附近的缓存(听起来像这样),请考虑使用其他解决方案。希望我能帮到你。

关于java - 具有分布式返回方案和本地存储设置的 Coherence Near 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21909490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com