有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

具有分布式备份方案和本地存储设置的java一致性近缓存

我使用连贯性12.1.2.0.0

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

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

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

在内部部分,我尝试了使用直接局部方案的备份映射方案和使用局部方案的读写备份映射方案。结果是一样的。这是我的大致测试配置:

    <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>

我需要什么样的方案


共 (1) 个答案

  1. # 1 楼答案

    把你真正的问题弄丢了。但是,如果希望为同一集群中的不同节点分配/限制不同的内存大小,那么可以将单位计算器设置为二进制,然后在启动集群节点时通过JVM参数提供自定义的最大内存大小。 检查如何计算缓存中对象的大小

    Implementing Storeage Node