什么是正确使用org.redisson.api.RedissonClient.getMap(..)

问题描述 投票:0回答:1

在Node1 Service1中运行的Service1在Redis Bucket“UserBucket”中添加用户数据

在Node2 Service2中运行的Service2需要从Redis Bucket“Users”获取最新的用户数据

我在Service2中维护了org.redisson.api.RedissonClient的单例实例

最初我的getCache()看起来像

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

然后我查看了org.redisson.api.RedissonClient中的getMap()实现

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开销?

否则,我应该只调用一次并保留本地副本,如图所示?

redis redisson
1个回答
0
投票

Github的Redisson Group证实了这一点

使用每个redisson.getMap()调用,它返回一个RMap实例。这个实例可以安全地在每个线程之间共享,随时重用。

© www.soinside.com 2019 - 2024. All rights reserved.