dubbo解析-服务结果缓存工厂CacheFactory接口详解

本文基于dubbo 2.7.5版本代码

服务结果缓存工厂CacheFactory接口详解

一、CacheFactory详解

dubbo提供的CacheFactory一共有四个:

  1. ThreadLocalCacheFactory
  2. JCacheFactory
  3. LruCacheFactory
  4. ExpiringCacheFactory

dubbo会根据@Reference注解中设置的cache值,找到上面对应的CacheFactory实现类,对应的cache属性配置值分别是“threadlocal”、“jcache”、“lru”、“expiring”。
CacheFactory实现类用于创建对应的Cache对象。比如LruCacheFactory用于创建LruCache对象。LruCache实现了Cache接口,负责对数据的缓存。

public class LruCacheFactory extends AbstractCacheFactory {
    @Override
    protected Cache createCache(URL url) {
        return new LruCache(url);//创建LruCache对象
    }
}

二、AbstractCacheFactory详解

上面提到的四个类共同的基类是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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值