Hazelcast Near Cache не работает с простым примером

В настоящее время я использую Hazelcast версии 3.9

Я пробовал несколько способов реализовать ближний кэш, и, кажется, я не могу найти правильный путь. Ниже я поделился своим кодом и дал мне знать, где я ошибаюсь.

    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

public class HazelcastConfig 
{

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

        return HazelcastClient.newHazelcastClient(cfg);
    }
}

Конфигурация в клиенте Hazelcast

<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 изменений нет.

1 ответ

Решение

@Tatkal

  1. map.set делает недействительным ближайший кеш, не помещайте туда новое значение
  2. Near Cache используется только для доступа на основе ключей, ваш цикл вообще не затрагивает Near Cache. Вам нужно изменить вторую строку в цикле следующим образом: String value = nearCacheMap.get(entrySet.getKey()); или измените цикл на набор ключей, как
        for (Double key : nearCacheMap.keySet()) {
            String value = entrySet.getValue(key);
        }
  1. Даже после изменения вы все равно увидите 0, поскольку вы только что выполнили 1 операцию get, и это была ошибка кэша. Если вы повторите цикл и напечатаете статистику несколько раз, вы увидите это:
---------------------------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
Другие вопросы по тегам