gpt4 book ai didi

java - 需要选择更新类似 Guava 缓存的功能

转载 作者:行者123 更新时间:2023-12-02 11:56:14 24 4
gpt4 key购买 nike

我有两个类和第三个包含 Guava 缓存对象的单例类。我在 A 类中使用这个缓存来执行 get(key) 并在调用时递增,并且调用速度为 3000/分钟。有一个 B 类使用 get(key) 将此值添加到 db 中,并在该键上添加 0。如果 A 和 B 同时读取相同的值,可能会导致问题。例如,如果键的值为 12,则两者都读取 12,B 设置为 0,然后 A 再次将其设置为 13。请建议该怎么做。

最佳答案

使用

cache.asMap().compute(key, (k, v) -> v==null ? 1 : v+1)

对于 A 和

int[] result = {0};
cache.asMap().computeIfPresent(key, (k, v) -> {
result[0] = v;
return 0; // or null if you want to remove the entry
});

对于B来说, map View 是ConcurrentMap,它锁定了key上的计算。

您可能根本不需要缓存。考虑使用 ConcurrentHashMap、AtomicLongMap 或(如 Xaerxess 指出的)ConcurrentHashMultiset (最后一个选择可能是最好的,因为多重集用于计数)。

关于java - 需要选择更新类似 Guava 缓存的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47581749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com