【问题标题】:Redisson putting an ArrayList or RList inside an RMap. What will happen?Redisson 将 ArrayList 或 RList 放入 RMap 中。会发生什么?
【发布时间】:2020-09-17 13:40:59
【问题描述】:

代码示例:

map = client.getMap(...)

list = client.getList();

map.put(.., list);

...

list.add(....);

... 

thelist = map.get(...,)

这里会发生什么?

列表会被转换为 json,还是 Redisson 会弄清楚并仅使用参考列表?

列表的更新会反映在地图中吗?

如果我决定包装 RedissonList 会发生什么,我的 wrapper 类会被序列化为 json,而委托列表是对 redis 列表的引用,还是也会被序列化。

许多问题,但重要的是要掌握什么是可能的,什么是不可能的。

ma​​p.compute 似乎也没有在本地锁定,所以必须小心。

我建议实现应该覆盖其子类中 java.util 中的所有内容并注释或注释(仅提供信息性注释)以说明此方法仅具有本地 java.util.Map 工作本地效果。

【问题讨论】:

  • 嗨,嗯,除了 map.compute 之外,您的其他问题是否得到了答案?例如,列表的更新会反映在地图中吗?
  • 我认为他在下面回答,但我从那个项目继续前进。我不认为这是一个实用的库。我在 Jedis 之上构建了一些卓越的东西,保留了完全的灵活性和控制力。
  • 他的回答似乎更多地是关于map.compute,而不是列表的更新反映在地图中。那很有意思!它是开源的吗?可以分享一下吗?
  • 不是,因为需要花费大量时间来确保所有内容都是针对一致的 API 编写的,而不是强迫人们使用底层机制 (Jedis)。到目前为止,我个人需要的功能是一个包装 API,用于与 Jedis 通信,进而与 Redis 通信。写了一堆东西,地图,列表,流,队列,事件,但不是每个的所有功能。我可能会尽快将它作为开源发布。然后也许社区可以填补空白,但太多其他优先事项使我不再优先考虑,因为我已经拥有了我需要的东西。
  • @Enoobong 过去一周我一直致力于发布一系列软件,很快我将尝试发布该库的第一个版本。

标签: redis redisson


【解决方案1】:

在这种情况下,RMap 值包含对 RList 对象的引用。

map.compute 似乎也没有在本地锁定,所以必须小心。

如评论中所述,即使本地地图也没有锁定:The default implementation makes no guarantees about synchronization or atomicity properties of this method

【讨论】:

  • 嗯,不,但是 concurrenthashmap 可以,它会覆盖该方法。如果 RMap 中存在我们认为同时安全的不安全方法,那么应该抛出或实现它的一个版本。
猜你喜欢
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 2020-12-29
  • 1970-01-01
  • 2013-02-23
  • 2011-02-12
  • 2013-02-25
相关资源
最近更新 更多