首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >近缓存的Hazelcast不使用简单示例

近缓存的Hazelcast不使用简单示例
EN

Stack Overflow用户
提问于 2019-01-24 06:10:02
回答 1查看 1.7K关注 0票数 1

我目前正在使用hazelcast版本的3.9

我尝试过几种实现近缓存的方法,但似乎找不到正确的方法。下面我已经分享了我的代码,并让我确切地知道我的错误所在。

代码语言:javascript
复制
    public class NearCacheExample {

    public static void main(String[] args) throws IOException 
    {
        HazelcastConfig hzConfig = new HazelcastConfig();

        HazelcastInstance hzInstance = hzConfig.getHZInstance();

        IMap<Double, String> nearCacheMap = hzInstance.getMap("cacheExample");

        for (int i = 0; i < 100000; i++) {
            nearCacheMap.set(Math.random(), i + "");
        }

        long startTime = System.currentTimeMillis();

        System.out.println("---------------------------Before Sort----------------------------------");

        for (Entry<Double, String> entrySet : nearCacheMap.entrySet()) {

            Double key = entrySet.getKey();
            String value = entrySet.getValue();

        }

        long endTime = System.currentTimeMillis();

        System.out.println("------------------------------------------------Read Both---------------------------------------------------");

        NearCacheStats nearCacheStatistics = nearCacheMap.getLocalMapStats().getNearCacheStats();

        System.out.println( "Near Cache hit/miss ratio 3= "
                + nearCacheStatistics.getHits());

        System.out.println("Near cache implemented or not " + nearCacheMap.getLocalMapStats().getNearCacheStats().getOwnedEntryCount());

        System.out.println(" EndTime timeDifference : " + startTime + " " + endTime + " " +(endTime-startTime));

    }
}

我在检查NearCache统计数据时得到的输出是完全0。

HazelcastConfig.java文件

代码语言:javascript
复制
public class HazelcastConfig 
{

    public HazelcastInstance getHZInstance() throws IOException
    {
        ClientConfig cfg = new XmlClientConfigBuilder("src/main/resources/hazelcast-client.xml").build();

        return HazelcastClient.newHazelcastClient(cfg);
    }
}

Hazelcast客户端的配置

代码语言:javascript
复制
<near-cache name="default">
<in-memory-format>BINARY</in-memory-format>
<invalidate-on-change>true</invalidate-on-change>
<eviction eviction-policy="NONE" max-size-policy="ENTRY_COUNT" size="10"/>

我还尝试在hazelcast-client.xml文件中更改缓存名。似乎什么都起不到作用。

在hazelcast服务器端,没有任何更改。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-24 07:06:37

@Tatkal

  1. map.set使近缓存无效-- put --不要将新值放在那里
  2. 近缓存只用于基于密钥的访问,您的循环根本没有击中缓存附近。您需要更改循环中的第二行,如下所示:String value = nearCacheMap.get(entrySet.getKey());或将循环更改为keySet
代码语言:javascript
复制
        for (Double key : nearCacheMap.keySet()) {
            String value = entrySet.getValue(key);
        }
  1. 即使在更改之后,您仍然会看到0,因为您只执行了1次get操作,这是一个缓存丢失。如果您多次重复循环和stats打印,您将看到以下内容:
代码语言:javascript
复制
---------------------------Before Sort----------------------------------
------------------------------------------------Read Both---------------------------------------------------
Near Cache hit/miss ratio = 0 / 100000
Near cache implemented or not 10
 EndTime timeDifference : 1548313357643 1548313362527 4884
------------------------------------------------Read Both---------------------------------------------------
Near Cache hit/miss ratio = 10 / 199990
Near cache implemented or not 10
 EndTime timeDifference : 1548313357643 1548313367155 9512
------------------------------------------------Read Both---------------------------------------------------
Near Cache hit/miss ratio = 20 / 299980
Near cache implemented or not 10
 EndTime timeDifference : 1548313357643 1548313371688 14045
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54340342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档