2014-06-18 2 views
0

캐시가 한 노드에 유지되고 다른 노드에서 액세스되는 구성이 있습니다. get() 및 put()을 완벽하게 잘 수행 할 수 있지만 size(), keySet() 등의 일부 연산은 올바른 결과를 반환하지 않습니다.GridGain 원격 캐시 크기는 항상 0입니다.

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를 데이터 노드 클래스

,

노드 1의 출력은 맵에 항목이 있어도 크기가 0 인 경우 다음과 같습니다. 이것이 잘못된 설정 때문인지 확실하지 않습니다. GridGain 캐시 API의 메소드

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

답변

1

size(), primarySize(), nearSize(), keySet(), primaryKeySet(), values(), primaryValues(), entrySet(), primaryEntrySet() 지역, 그들은 로컬 노드에 저장 키의 크기 나 컬렉션을 반환합니다.

모드에서 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 버전에 추가 될 예정입니다.

+0

솔루션이 작동합니다. 그러나 내가 힙 캐시 (cacheMode = LOCAL 및 memoryMode = OFFHEAP_TIERED)에서 로컬 크기로 가져 오려고하면 값이 있지만 크기가없는 동일한 문제가 발생합니다. 위의 코드조차도 작동하지 않습니다. 어떤 아이디어? – GDS

+1

'size()'메서드는 on-heap 항목의 수를 반환합니다. 'OFFHEAP_TIERED'메모리 모드가 사용되면, 캐시 엔트리는 바로 오프 힙에 저장된다. 캐시의 오프 힙 항목 수를 얻으려면,'GridCache.offheapEntriesCount()'를 사용하십시오. – Alexey

관련 문제