我需要的是一个相当复杂的数据结构,具有以下要求:
它应支持并发读/写而不会过度锁定(如java.util.concurrent.ConcurrentHashMap
)
它应该有容量限制并在达到限制后阻止(就像BlockingQueue
实施一样)
它应该具有有效的搜索机制,例如Map
/ HashSet
:给定对象的ID,我需要能够在没有顺序扫描的情况下找到它。
应该可以在超时时逐出元素,例如:如果条目在X
分钟之前放入此结构中,则应自动删除。
当然,我总是有机会自己实现它,但我更愿意找到现有的,优化的和经过充分测试的。
唯一接近的是Guava的缓存,但似乎缺少#2。关于已知实现的任何想法?
答案 0 :(得分:1)
您可以编写一个简单的BlockingCache,它包装现有的Guava Cache并检查put
操作的容量,因此put看起来像这样:
public V put(K key, V value)
{
while (size() >= capacity) Thread.sleep(100);
return innerCache.put(key, value);
}