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

时间:2018-03-03 22:19:45

标签: redis redisson

Service1中运行的Service1 Service1在Redis Bucket" UserBucket"

中添加用户数据

Service2中运行的Service2 Service2需要从Redis Bucket"用户"

中获取最新的用户数据

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

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

1 个答案:

答案 0 :(得分:0)

Redith Group在github证实了

  

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