Dubbo 介面呼叫結果快取的實現分析

2021-08-03 10:55:09 字數 2242 閱讀 2122

結果快取,用於加速熱門資料的訪問速度,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 第四步 ...