我需要在我的应用程序中实现一个计数器映射(如 Map)。然而,这个结构应该被多个线程访问。
看起来ConcurrentHashMap<Key, Long>
不是一个合适的解决方案,对吧?
ConcurrentHashMap<Key, AtomicLong>
我反而想了想。
但是有一个问题 - 增量请求分布不均。很少有最流行的 Key 可以有高达 95% 的对该数据结构的所有增量请求。
据我了解,这将导致对单个AtomicLong
实例的并发访问,并且应该发生许多锁,这会在一定程度上降低效率。
问题 1:有没有更好的解决方案 - 也许是更好的数据类型而不是AtomicLong
,它允许增量的短累积或类似的东西?
问题 2:我想定期(也许每分钟)将结构持久化到磁盘,并且我想保持其“实际”状态(所有最近的更新都已解决?) - 最直接的方法是什么?