gpt4 book ai didi

java - 批量操作java同步缓存

转载 作者:行者123 更新时间:2023-11-30 08:41:11 26 4
gpt4 key购买 nike

我想实现一个简单的缓存,它会定期更新,每次更新都会触发一次完整的缓存清除和数据插入。

伪代码:

//context calls periodically this method
cache.clear();
cache.putAll(newValues)

因为其他线程可能会在刷新操作期间读取缓存。我需要某种同步。

最简单的解决方案可能类似于以下内容:

computeNewCacheValues()
computeStaleKeys() //e.g. ones are in the cache but are not in the new cache
removeStaleKeysOneByOneFromCache()
updateKeysFromNewCacheValueOneByOne()

该实现由 ConccurentHashMap 实例支持 - 因此在缓存更新期间:

  • 没有并发问题发生(?)
  • 缓存在整个过程中没有被锁定(因此在刷新期间可以访问)

这可能是(?)一个很好的解决方案,但我想知道:是否有其他更有效/更安全的方法来实现它?是否有任何库能够执行此操作?

最佳答案

如果您总是更换整个缓存,您可以只更换它。

final AtomicReference<Map<K, V>> mapRef = new AtomicReference<>();

// assuming you don't modify the map after calling this.
public void update(Map<K, V> map) {
mapRef.set(map);
}

public V get(K key) {
// this will always see the latest complete map.
return mapRef.get().get(key);
}

注意:不需要锁定,因为 map 一旦添加到缓存中就不会更改。

关于java - 批量操作java同步缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35223774/

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