我有一个散列图,它存储大约1 G的数据是键值对的术语。此hashmap每15天更改一次。它将被加载到内存中并从那里使用。
当必须将新的hashmap加载到内存中时,会有几个事务已经在内存中访问hashmap。如何在不影响访问旧hashmap的当前事务的情况下,用新的hashmap替换旧的hashmap。如果有办法在内存中热插拔hashmap?
答案 0 :(得分:3)
使用AtomicReference<Map<Foo, Bar>>
而不是直接(硬)引用地图。地图的使用者将使用#get()
,当您准备换出地图时,您的“内部”代码将使用#set()
或#getAndSet()
。
答案 1 :(得分:1)
参考分配在Java中是原子的,而volatile确保可见性。
注意事项:
get(K key)
,以便用户始终访问最新地图。答案 2 :(得分:0)
如果数据大小和你的一样大,我建议使用像memcached这样的缓存工具。这样,您可以根据您的要求使单个项目或整个缓存无效。