在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开销?
否则,我应该只调用一次并保留本地副本,如图所示?
Github的Redisson Group证实了这一点
使用每个redisson.getMap()调用,它返回一个RMap实例。这个实例可以安全地在每个线程之间共享,随时重用。