Как правильно использовать org.redisson.api.RedissonClient.getMap(..)

Service1 работает в узле Node1 Service1 добавляет пользовательские данные в Redis Bucket «UserBucket»

Службе 2, работающей в узле 2, службе 2 необходимо получить последние пользовательские данные из корзины Redis «Пользователи».

Я поддерживаю одноэлементный экземпляр org.redisson.api.RedissonClient внутри Service2.

Первоначально мой getCache() выглядел как

private static RMap<String, Map<String,User>> getCache(String bucketName) {
  return redissonCacheClient.getMap(bucketName);
}

Затем я посмотрел на реализацию getMap() внутри org.redisson.api.RedissonClient.

return new RedissonMap<K, V>(connectionManager.getCommandExecutor(), name, this, null);

Кажется, что каждый вызов getMap(..) создает новый экземпляр RedissonMap(..)

Итак, теперь я поддерживаю один экземпляр RMap следующим образом (вместо того, чтобы каждый раз вызывать getMap())...

private static RMap<String, Map<String,User>> getCache(String bucketName) {
        RMap<String, Map<String,User>> userMap;
        if (cacheByOrg.containsKey(bucketName)) {
            userMap = cacheByOrg.get(bucketName);
        } else {
            userMap = redissonCacheClient.getMap(bucketName);
            cacheByOrg.put(bucketName, userMap);
        }
        return geoFenceMap;
    }

Но теперь я подозреваю, что не получаю последние данные из кеша.

Было бы здорово, если бы кто-нибудь подтвердил правильность использования клиента Redisson.

Можно ли вызывать getMap() много раз (будет ли он подключаться к одному и тому же экземпляру экземпляра кэша внутри, чтобы я всегда получал последние данные? Если да, то может ли создание такого количества экземпляров RedissonMap привести к накладным расходам OOM/GC?

В противном случае я должен вызвать его только один раз и сохранить локальную копию, как показано?


person kaniska Mandal    schedule 03.03.2018    source источник


Ответы (1)


Redisson Group в github подтвердила, что

При каждом вызове redisson.getMap() он возвращает экземпляр RMap. Этот экземпляр можно безопасно разделить между каждым потоком, не стесняйтесь использовать его повторно.

person kaniska Mandal    schedule 05.03.2018
comment
Итак, было интересно, лучше ли вызывать getMap только один раз и повторно использовать один и тот же экземпляр, или это фактически то же самое? - person RaRa; 17.02.2021