dubbo提供的CacheFactory一共有四个:
ThreadLocalCacheFactory、JCacheFactory、LruCacheFactory、ExpiringCacheFactory,对应的cache属性配置值分别是threadlocal、jcache、lru、expiring。
CacheFactory实现类用于创建对应的Cache对象。比如LruCacheFactory用于创建LruCache对象。Cache对象负责对数据的缓存。
上面提到的四个类共同的基类是AbstractCacheFactory。这个类的主要代码如下:
private final ConcurrentMap<String, Cache> caches = new ConcurrentHashMap<String, Cache>();
@Override
public Cache getCache(URL url, Invocation invocation) {
url = url.addParameter(METHOD_KEY, invocation.getMethodName());//在url中添加需要访问的远程服务的方法名
String key = url.toFullString();//相当于远程服务注册到注册中心的url
Cache cache = caches.get(key);
if (cache == null) {
caches.put(key, createCache(url));
cache = caches.get(key);
}
return cache;
}
caches属性记录了本工厂对象所有的Cache对象,每个远程服务方法对应一个Cache对象。如果caches中不存在Cache对象,调用createCache方法创建Cache对象,比如LruCacheFactory的createCache方法用于创建LruCache。