標籤:soft sof config ref 代碼 介紹 本地 方式 div
上節,我們說明了封裝分布式緩衝的介面、配置以及在startup中的註冊方式。下面的,我們具體介紹下,分布式緩衝的具體實現。
第一個實現,將本機快取作為分布式緩衝,主要用於沒有分布式緩衝的情況,這樣就可以不修改程式的情況下直接使用本機快取。
1 public class DefaultCacheHandler : BaseCacheHandler 2 { 3 private IDistributedCache memoryCache; 4 5 public DefaultCacheHandler(CachingConfigInfo configInfo) : base(configInfo) 6 { 7 this.memoryCache = new MemoryDistributedCache(new MemoryCache(new MemoryCacheOptions())); 8 } 9 10 protected override IDistributedCache _Cache11 {12 get13 {14 return this.memoryCache;15 }16 }17 }
第二個實現,使用redis作為分布式緩衝。
1 public class RedisCacheHandler : BaseCacheHandler 2 { 3 private IDistributedCache _RedisCache; 4 5 public RedisCacheHandler(CachingConfigInfo configInfo) : base(configInfo) 6 { 7 IOptions<RedisCacheOptions> optionsAccessor = new RedisCacheOptions(); 8 9 optionsAccessor.Value.Configuration = string.Join(",", _ConfigInfo.Servers.Select(s => s.HostName + ":" + s.Port));10 optionsAccessor.Value.InstanceName = "Runtime";11 12 _RedisCache = new RedisCache(optionsAccessor);13 }14 15 protected override IDistributedCache _Cache16 {17 get18 {19 return _RedisCache;20 }21 }22 }
如果想使用Memcached等緩衝,具體做法是,首先根據IDistributedCache介面實現對於memcached的存取,然後參照根據以上實現BaseCacheHandler類即可。如何根據IDistributedCache介面實現對於memcached的存取,這是一個痛點,不過如果之前使用過.net 訪問memcached的時候,應該對Enyim.memcached不陌生吧。部落格園使用.net core改寫了Enyim.memcached,具體請見.NET跨平台之旅:基於.NET Core改寫EnyimMemcached,實現Linux上訪問memcached緩衝。
其實從這個類庫的原始碼我們可以發現,MemcachedClient是IDistributedCache介面的實現,因此這個我們拿過來直接使用就行,剩下再利用MemcachedClient編寫一個實現BaseCacheHandler類就萬事大吉了:)
面向雲的.net core開發架構目錄
MemcachedClient
4.3 可配置的分布式緩衝(下)