dubbo提供的CacheFactory一共有四個(gè):
ThreadLocalCacheFactory黄伊、JCacheFactory派殷、LruCacheFactory、ExpiringCacheFactory毡惜,對(duì)應(yīng)的cache屬性配置值分別是threadlocal、jcache扶叉、lru、expiring枣氧。
CacheFactory實(shí)現(xiàn)類(lèi)用于創(chuàng)建對(duì)應(yīng)的Cache對(duì)象达吞。比如LruCacheFactory用于創(chuàng)建LruCache對(duì)象。Cache對(duì)象負(fù)責(zé)對(duì)數(shù)據(jù)的緩存酪劫。
上面提到的四個(gè)類(lèi)共同的基類(lèi)是AbstractCacheFactory。這個(gè)類(lèi)的主要代碼如下:
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中添加需要訪問(wèn)的遠(yuǎn)程服務(wù)的方法名
String key = url.toFullString();//相當(dāng)于遠(yuǎn)程服務(wù)注冊(cè)到注冊(cè)中心的url
Cache cache = caches.get(key);
if (cache == null) {
caches.put(key, createCache(url));
cache = caches.get(key);
}
return cache;
}
caches屬性記錄了本工廠對(duì)象所有的Cache對(duì)象刻剥,每個(gè)遠(yuǎn)程服務(wù)方法對(duì)應(yīng)一個(gè)Cache對(duì)象造虏。如果caches中不存在Cache對(duì)象踢械,調(diào)用createCache方法創(chuàng)建Cache對(duì)象魄藕,比如LruCacheFactory的createCache方法用于創(chuàng)建LruCache。