linkedHashMap 使用链表实现map,所以具备链表的特性,即删除最先加入的key,removeEldestEntry方法就是这个功能。也就是说它自带了类似lru的驱出key的能力。
具体代码:
public LruCache(URL url) {
final int max = url.getParameter("cache.size", 1000);
this.store = new LinkedHashMap<Object, Object>() {
private static final long serialVersionUID = -3834209229668463829L;
@Override
protected boolean removeEldestEntry(Entry<Object, Object> eldest) {
return size() > max;
}
};
}
使用ConcurrentHashMap,就需要额外实现一套维护热点数据的算法,而dubbo在过去几年都没有维护,大多是使用者自己在master上自己维护的私有库,所以很多方面并不是非常优秀。
不过你应该知道dubbo的的扩展能力极强,有个好的架子,所以你完全可以自己实现lru,或者引入优秀的lru框架比如caffeine,来实现自己的需求。
@fucongchan 当前建议通过dubbo扩展机制接入更专业的cache框架
Most helpful comment
linkedHashMap 使用链表实现map,所以具备链表的特性,即删除最先加入的key,removeEldestEntry方法就是这个功能。也就是说它自带了类似lru的驱出key的能力。
具体代码:
使用ConcurrentHashMap,就需要额外实现一套维护热点数据的算法,而dubbo在过去几年都没有维护,大多是使用者自己在master上自己维护的私有库,所以很多方面并不是非常优秀。
不过你应该知道dubbo的的扩展能力极强,有个好的架子,所以你完全可以自己实现lru,或者引入优秀的lru框架比如caffeine,来实现自己的需求。