結果快取,用於加速熱門資料的訪問速度,dubbo提供宣告式快取,以減少使用者加快取的工作量。配置如:
inte***ce="com.foo.barservice" cache="lru" />
或:
inte***ce="com.foo.barservice">
name="findbar"
cache="lru" />
dubbo:reference>
當配置完畢後,客戶端發起一次呼叫請求,dubbo會先去查詢快取,如果能找到結果,則返回。否則,執行完整的呼叫請求,最後將結果快取。
結果快取體系有兩部分組成,分別是快取工廠(cachefactory),快取(cachefactory)。快取工廠用來建立快取,來快取某個方法的結果。框架自帶的快取工廠有如下幾種。
而框架自帶的對應的快取型別與快取工廠對應。
第一節配置說明使用的快取型別為lru(最近最少使用)。也可以根據dubbo提供的擴充套件機制實現自定義快取。只要分別實現快取工廠和快取即可。
在dubbo呼叫鏈建立一文中知道,dubbo對目標方法呼叫前會先經過過濾器鏈。而結果快取的實現正是通過com.alibaba.dubbo.cache.filter.cachefilter類來實現。
該類的實現如下。
public
class
cachefilter
implements
filter
public result invoke(invoker> invoker, invocation invocation) throws rpcexception
result result = invoker.invoke(invocation);
if (! result.ha***ception())
return result;}}
}return invoker.invoke(invocation);}}
其主流程為:
1.根據呼叫方法的相關引數獲取快取物件。
2.以方法引數為key,去查詢結果。
3.快取中若查詢到結果則返回,否則繼續呼叫,最後快取此次呼叫結果。
dubbo中提供的cache介面,有兩個方法,put及get。
public
inte***ce
cache
而實現類中快取的資料結構根據實現不同而變化。
lru cache為:
private
final mapstore;
threadlocalcache為:
private
final threadlocal> store;
jcache為:
private
final cachestore;
cache工廠(cachefactory)都繼承自abstractcachefactory類。
public
abstract
class
abstractcachefactory
implements
cachefactory
return cache;
}protected
abstract cache createcache(url url);
}
可以看到在這個類中通過concurrentmap來儲存不同key,所對應的cache,例如方法a的快取cachea,b的cacheb。並提供get方法來獲取對應key的快取物件。此外提供了抽象方法createcache留給具體的工廠類去實現,根據快取型別的不同,建立不同的快取物件。
1、dubbo 官方文件
2、dubbo 2.8.4原始碼
Dubbo學習 十一 結果快取
為什麼要用到結果快取,主要是用於加速熱門資料的訪問速度,dubbo提供宣告式快取,以減少使用者加快取的工作量 快取的應用非常廣泛,為了提高資料訪問的速度。dubbo也不例外,它提供了宣告式快取,以減少使用者加快取的工作量。一 dubbo中快取策略 xmlversion 1.0 encoding ut...
dubbo介面的呼叫
dubbo是乙個分布式服務框架,致力於提供高效能和透明化的rpc遠端服務呼叫方案,以及soa服務治理方案。簡單的說,dubbo就是個服務框架,如果沒有分布式的需求,其實是不需要用的,只有在分布式的時候,才有dubbo這樣的分布式服務框架的需求,並且本質上是個服務呼叫的東東,說白了就是個遠端服務呼叫的...
Linux命令呼叫Dubbo介面
第一步 telnet ip dubbo埠號,連線dubbo。例如 telnet 127.0.0.1 21963 第二步 ls,獲取所有dubbo service 第三步 ls service全名稱,例如 ls com.zm.dubbo.test.service.mydubboservice 第四步 ...