1. 程式人生 > >ABP原始碼分析十三:快取Cache實現

ABP原始碼分析十三:快取Cache實現

ABP中有兩種cache的實現方式:MemroyCache 和 RedisCache. 如下圖,兩者都繼承至ICache介面(準確說是CacheBase抽象類)。ABP核心模組封裝了MemroyCache 來實現ABP中的預設快取功能。 Abp.RedisCache這個模組封裝RedisCache來實現快取(通過StackExchange.Redis這個類庫訪問redis)。

ICache:快取的介面。以string型別的key快取object型別的value.ICache.Get方法有兩個引數:

•key:快取中一個條目的鍵(字串型別)。

•工廠:沒有找到指定key的快取條目時呼叫傳入的action來建立cache。工廠方法應該建立並返回實際的條目。如果給定的key在快取中找到了,那麼不會呼叫該action。

ICache介面也有像GetOrDefault,Set,Remove,Clear的方法。同時,這些方法也有非同步(async)版本。

ITypedCache/TypedCacheWrapper: 支援泛型key和value的快取介面與實現,其內部通過封裝ICache例項和CacheExtension定義的對ICache的擴充套件方法來是實現泛型版本的Icache.


另外通過CacheExtension中的方法可以方便的將ICache物件轉換為 ITypedCache物件。 ITypeCache是ICache的包裝器,提供型別安全、泛型的cache。為了將ICache轉為ITypedCache,我們可以使用AsTyped擴充套件方法.

CacheExtension: 定義了ICache的擴充套件方法. 最關鍵的是如下兩個支援泛型的方法:GetOrDefault和GetOrDefaultAsync。如下,內部呼叫ICache例項的相應方法並通過型別轉換。

AbpCacheNames:定義了四個cachekey常量,這幾個cache是供ABP框架使用的

ICacheConfigurator/CacheConfigurator:封裝了cachename和對該cahce的初始化方法,通過初始化方法可以完成對cache的配置(比如過期時間)。

ICachingConfiguration

/CachingConfiguration: 該介面提供完成cache的配置的方法。具體是通過封裝了一個ICacheConfigurator集合,並呼叫其上面的InitAction來配置cache

ICacheManager/CacheManagerBase: 該介面和實現用於生成,配置以及銷燬ICache例項。具體是通過ICachingConfiguration物件來初始化cache, 並通過ConcurrentDictionary<string, ICache>來存放和管理cache.

ICacheManager.GetCache方法返回一個ICache。第一次請求時會建立快取,並通過CachingConfiguration中的CacheConfigurator完成對該Cache的配置,以後都是返回相同的快取物件。因此,我們可以在不同的類(客戶端)中共享具有相同名字的相同快取。

AbpMemoryCache:通過CLRMemoryCache來實現Icache.

AbpMemoryCacheManager:重寫了CacheManagerBaseCreateCacheImplementation方法,該方法用於建立真實的Icache物件。 具體到AbpMemoryCacheManager就是建立AbpMemoryCache

AbpRedisCacheManager:重寫了CacheManagerBaseCreateCacheImplementation方法,該方法用於建立真實的Icache物件。 具體到AbpRedisCacheManager就是建立AbpRedisCache

IAbpRedisConnectionProvider/AbpRedisConnectionProvider:web.config中讀取Redisconnectionstring資訊,並通過connectionstring生成ConnectionMultiplexer物件。AbpRedisConnectionProvider是一個單例實現,並且將ConnectionMultiplexer物件儲存在其本地的Dictionary中,避免反覆建立。

AbpRedisCache:實現了從Redis資料庫讀取資料的功能。具體則是通過IAbpRedisConnectionProvider物件來訪問redis資料庫。

相關推薦

ABP原始碼分析十三快取Cache實現

ABP中有兩種cache的實現方式:MemroyCache 和 RedisCache. 如下圖,兩者都繼承至ICache介面(準確說是CacheBase抽象類)。ABP核心模組封裝了MemroyCache 來實現ABP中的預設快取功能。 Abp.RedisCache這個模組封裝RedisCache來實現快取(

ABP原始碼分析依賴注入的實現

ABP的依賴注入的實現有一個本質兩個途徑:1.本質上是依賴於Castle這個老牌依賴注入的框架。2.一種實現途徑是通過實現IConventionalDependencyRegistrar的例項定義注入的約定(規則),然後通過IocManager來讀取這個規則完成依賴注入。3另一種實現途徑是直接IocManag

[Abp 原始碼分析]十三、多語言(本地化)處理

0.簡介 如果你所開發的需要走向世界的話,那麼肯定需要針對每一個使用者進行不同的本地化處理,有可能你的客戶在日本,需要使用日語作為顯示文字,也有可能你的客戶在美國,需要使用英語作為顯示文字。如果你還是一樣的寫死錯誤資訊,或者描述資訊,那麼就無法做到多語言適配。 Abp 框架本身提供了一套多語言機制來幫助我們實

Spring Security原始碼分析Spring Social實現微信社交登入

社交登入又稱作社會化登入(Social Login),是指網站的使用者可以使用騰訊QQ、人人網、開心網、新浪微博、搜狐微博、騰訊微博、淘寶、豆瓣、MSN、Google等社會化媒體賬號登入該網站。 前言 在上一章Spring-Security原始碼分析

Spring Security原始碼分析Spring Social實現QQ社交登入

社交登入又稱作社會化登入(Social Login),是指網站的使用者可以使用騰訊QQ、人人網、開心網、新浪微博、搜狐微博、騰訊微博、淘寶、豆瓣、MSN、Google等社會化媒體賬號登入該網站。 OAuth2.0的認證流程示意圖 請求第三方應用

ABP原始碼分析ABP Module

Abp是一種基於模組化設計的思想構建的。開發人員可以將自定義的功能以模組(module)的形式整合到ABP中。具體的功能都可以設計成一個單獨的Module。Abp底層框架提供便捷的方法整合每個Module.下圖是所有Abp自帶的module.AbpModule是所有Module的基類,其已經擁有了IIocMa

ABP原始碼分析整體專案結構及目錄

ABP是一套非常優秀的web應用程式架構,適合用來搭建集中式架構的web應用程式。 整個Abp的Infrastructure是以Abp這個package為核心模組(core)+15個模組(module).其中13個依賴於Abp這個核心包。另外兩個包(FluentMigration,Web.Resources

ABP原始碼分析ABP初始化全過程

ABP在初始化階段做了哪些操作,前面的四篇文章大致描述了一下。 為個更清楚的描述其脈絡,做了張流程圖以輔助說明。其中每一步都涉及很多細節,難以在一張圖中全部表現出來。每一步的細節(會涉及到較多介面,類,呼叫關係,步驟流程什麼的)會在後面的文章中通過其他圖和文字詳細描述。其實如果仔細分析Abp原始碼的話,會發現

ABP原始碼分析Logger整合

ABP使用Castle日誌記錄工具,並且可以使用不同的日誌類庫,比如:Log4Net, NLog, Serilog... 等等。對於所有的日誌類庫,Castle提供了一個通用的介面來實現,我們可以很方便的處理各種特殊的日誌庫,而且當業務需要的時候,很容易替換日誌元件。 Logger功能模組涉及到的介面和類不

ABP原始碼分析Configuration

核心模組的配置 Configuration是ABP中設計比較巧妙的地方。其通過AbpStartupConfiguration,Castle的依賴注入,Dictionary物件和擴充套件方法很巧妙的實現了配置中心化。配置中心化是一個支援模組開發的框架必備功能。 ABP中核心功能模組中的一些功能的執行時的

ABP原始碼分析ABP中配置的註冊和初始化

一般來說,ASP.NET Web應用程式的第一個執行的方法是Global.asax下定義的Start方法。執行這個方法前HttpApplication 例項必須存在,也就是說其建構函式的執行必然是完成了。 ABP開始的地方就是HttpApplication的建構函式。 如下圖一,Abp定義了一個繼承自Http

ABP原始碼分析Setting 以及 Mail

本文主要說明Setting的實現以及Mail這個功能模組如何使用Setting. 首先區分一下ABP中的Setting和Configuration。 Setting一般用於需要通過外部配置檔案(或資料庫)設定的簡單型別資料(一般就是字串),比如SMTP HOST. Configuration一般

ABP原始碼分析Unit Of Work

ABP以AOP的方式實現UnitOfWork功能。通過UnitOfWorkRegistrar將UnitOfWorkInterceptor在某個類被註冊到IOCContainner的時候,一併新增到該類在容器中對應的ComponentModel的Interceptors集合中。總結一句話就是,UOW的功能是通過

ABP原始碼分析後臺工作任務

文主要說明ABP中後臺工作者模組(BackgroundWorker)的實現方式,和後臺工作模組(BackgroundJob)。ABP通過BackgroundWorkerManager來管理BackgroundJobManager,然後通過BackgroundJobManager來管理BackgroundJob

Tomcat原始碼分析ServletOutputStream的實現

貌似很久都沒有寫部落格了,tomcat8的程式碼已經看了很多,主體部分的程式碼也都看得差不多了,發現在tomcat8中已經完全支援非阻塞的方式接收以及傳送資料了。。。。但是比較遺憾的是,以前遺留下來的太多的老程式碼都不支援這種新的方式來發送資料。。。木有辦法。。。 這裡來看

Flask原始碼分析路由內部實現原理

前言 Flask是目前為止我最喜歡的一個Python Web框架了,為了更好的掌握其內部實現機制,這兩天準備學習下Flask的原始碼,將由淺入深跟大家分享下,其中Flask版本為1.1.1。 上次瞭解了Flask服務的啟動流程,今天我們來看下路由的內部實現機理。 Flask系列文章: Flask開發初探 F

ABP原始碼分析十三ZERO的本地化

ABP Zero模組擴充套件了ABP基礎框架中的本地化功能,實現了通過資料庫管理本地化的功能。其通過資料庫儲存本地化語言及其資源。 ApplicationLanguage:代表本地化語言的實體類。一種語言就是一個ApplicationLanguage例項。 ApplicationLanguag

ABP原始碼分析十三ABP.Web

ABP.Web模組並不複雜,主要完成ABP系統的初始化和一些基礎功能的實現。 AbpWebApplication : 繼承自ASP.Net的HttpApplication類,主要完成下面三件事一,在Application_Start完成AbpBootstrapper的初始化。整個ABP系統的初始化就是通過A

ABP原始碼分析十七DTO 自動校驗的實現

對傳給Application service物件中的方法的DTO引數,ABP都會在方法真正執行前自動完成validation(根據標註到DTO物件中的validate規則)。 ABP是如何做到的? 思路無外乎通過Castle的攔截器實現AOP。本文主要分析ABP是如何設計。 Ivalidate: 空介面,用

ABP原始碼分析十三Authorization

Permission:用於定義一個Permission,一個permission可以包含多個子Permission. PermissionDictionary:繼承自Dictionary<string, Permission>類,很明顯是一個用於儲存permission物件的字典。 I