реализация упорядоченного кэша с использованием гуавы - PullRequest
0 голосов
/ 08 марта 2020

Я пытаюсь обработать некоторые промежуточные данные в фоновом режиме, чтобы избежать проблем с производительностью в главном потоке.

План состоит в том, чтобы собирать данные и обрабатывать их в фоновом режиме, поддерживая порядок вставки. Самое старое сообщение должно быть обработано в первую очередь. Чтение и запись в кеш происходят одновременно. Производительность является ключевым моментом здесь.

Есть ли способ добиться этого с помощью кэширования гуавы?

Вот код, который у меня есть:

public static Cache<String, String> cache = CacheBuilder.newBuilder()
      .maximumSize(Integer.MAX_VALUE)
      .concurrencyLevel(5)
      .removalListener(notification -> {
        System.out.println("REMOVE : " + notification.getKey() + " CAUSE :" + notification.getCause().name());
      })
      .build();

// Different threads are adding data to this queue by calling
cache.put(key, value);

// The worker thread
public void run() {

    while (true) {
      if (cache.size() > 0) {
        final ConcurrentMap<String, String> cacheMap = cache.asMap();
        for (Map.Entry<String, String> entry : cacheMap.entrySet()) {
          //send data to a different system.
          cache.invalidate(entry.getKey());
        }
      } else {
        // Add delay of 5 sec
        Thread.sleep(5000);
      }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...