如何在一致性缓存中设置分布式模式的容量



我在配置文件中设置了a

<?xml version="1.0"?>
<!DOCTYPE cache-config SYSTEM "cache-config.dtd">
<cache-config>
   <caching-scheme-mapping>   
         <cache-mapping>
              <cache-name>DIST_CACHE</cache-name>
              <scheme-name>distributed</scheme-name>
         </cache-mapping>     
   </caching-scheme-mapping>
   <caching-schemes>         
            <distributed-scheme>
                <scheme-name>distributed</sceme-name>
            <backing-map-scheme>
                <local-scheme>
                    <high-units>1000</high-units>
                    <unit-calculator>FIXED</unit-calculator>
                    <eviction-policy>LRU</eviction-policy>
                </local-scheme>
                </backing-map-scheme>
            <autostart>true</autostart>
            </distributed-scheme>
   </caching-schemes>
</cache-config>

据我所知,我不应该被允许在我的缓存中放置超过1000个条目,因为我在我的本地机器上运行它,没有其他资源,1000是一个硬限制。

但是我能做到:

NamedCache cache = CacheFactory.getCache("DIST_CACHE");                
try{            
    BufferedReader br = new BufferedReader(new InputStreamReader( new FileInputStream("testFile.txt")));    
    String line = "";
    String strKey = "";
    while((line=br.readLine())!=null){
        System.out.println("Key : " + newkey);
        strKey = newkey+"";
        cache.put(strKey,line);
        newkey++;              
        System.out.println("Number of elements in the Cache : " + cache.size());                     
    }
}        
catch(Exception ex1){
    System.out.println("Last line loaded : " + newkey);
    System.out.println("Exception : " + ex1);
}        

我的testFile.txt包含大约一百万条记录,我很容易超过1000个条目的阈值。原因是什么呢?

High-Unit表示Coherence caching将开始使用LRU策略驱逐数据以容纳新的传入条目的值,只是为了确保您不会耗尽内存。所以我不确定你是否期待内存异常从你的代码或不?因为在理想情况下你不会得到它;一致性必须从缓存中删除条目以腾出空间。

第二件要记住的事情是High单元适用于每个缓存实例,即您正在运行的每个一致性服务器可以为特定的NamedCache容纳1000个条目。因此,如果您在本地机器上运行2个缓存服务器,那么您可以在退出开始之前存储最多2000个缓存条目。

最新更新