我想实现一个简单的缓存,它会定期更新,并且每个更新都会触发完全缓存清除和数据插入。对java同步缓存的批量操作
伪代码:
//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实例提供支持 - 这样的高速缓存中的更新:发生
- 没有并发问题 (?)
- 整个过程中缓存未锁定(因此在刷新期间可访问)
这可能是一个很好的解决方案,但我想知道:还有其他更实用的方法吗?有没有能够进行这种操作的图书馆?
在您的示例中,您没有用新值覆盖现有项目,所以它们永远不会改变?那么如果你可以随着时间的推移填充缓存,那么如此复杂的替换又有什么意义呢? – AdamSkywalker
更新addKeysFromNeCacheValueOneByOne以更新KeeFromNewCacheValueOneBeOne;谢谢! – krisy
那么彼得的答案就好了,原子替代整个缓存要比这些复杂的更新技巧更好 – AdamSkywalker