GridGain远程缓存大小始终为零

时间:2014-06-18 06:23:09

标签: gridgain

我有一个配置,其中缓存保存在一个节点中并从另一个节点访问。虽然我能够得到()和put()完全没问题,但像size(),keySet()等一些操作并没有给我正确的结果。

Test1客户端节点缓存配置

<bean id="test-cache" class="org.gridgain.grid.cache.GridCacheConfiguration">
    <property name="name" value="testCache"/>
     <property name="cacheMode" value="PARTITIONED"/>
    <property name="distributionMode" value="CLIENT_ONLY" />
    <property name="swapEnabled" value="true"/>

</bean>

Test1客户端节点类

public class GridGainTest1
{
    public static void main(String[] args) throws Exception
    {
        //Client Mode
        Grid g = GridGain.start("etc/config/grid-test1.xml");
        //Put in Remote Cache
        g.cache("testCache").put(1, "ABC");
        g.cache("testCache").put(2, "XYZ");

        System.out.println("Size of Cache :- " + g.cache("testCache").size());
        System.out.println("Value for 1 :- " + g.cache("testCache").get(1));
        System.out.println("Value for 2 :- " + g.cache("testCache").get(2));
    }

Test2数据节点缓存配置

 <bean id="test-cache" class="org.gridgain.grid.cache.GridCacheConfiguration">
    <property name="name" value="testCache"/>
     <property name="cacheMode" value="PARTITIONED"/>
    <property name="swapEnabled" value="true"/>

</bean>

Test2数据节点类

    public class GridGainTest2
{
    public static void main(String[] args) throws Exception
    {
        Grid g = GridGain.start("etc/config/grid-test2.xml");
    }
}

节点1的输出如下,即使地图中有条目,大小也会显示为0。我不确定这是否是由于一些配置错误造成的。

Size of Cache :- 0
Value for 1 :- ABC
Value for 2 :- XYZ

1 个答案:

答案 0 :(得分:1)

在GridGain缓存API方法size()primarySize()nearSize()keySet()primaryKeySet()values()primaryValues()中, entrySet()primaryEntrySet()是本地的,它们只返回存储在本地节点上的密钥的大小或集合。

在您的情况下,您在CLIENT_ONLY模式下在Test1上启动了缓存,因此该节点不存储任何密钥。这就是您始终将0视为缓存大小的原因。

如果需要全局缓存大小,可以使用以下代码:

    GridCallable<Integer> sizeCallable = new GridCallable<Integer>() {
        @Override public Integer call() throws Exception {
            return g.cache("testCache").size();
        }
    };

    Collection<Integer> sizes = g.forCache("testCache").compute()
        .broadcast(sizeCallable).get();

    int globalSize = 0;

    for (Integer s : sizes)
        globalSize += s;

方便的GridCache.globalSize()方法将在即将发布的GridGain 6.2版本中添加。