上節,我們說明瞭封裝分散式緩存的介面、配置以及在startup中的註冊方式。下麵的,我們具體介紹下,分散式緩存的具體實現。 第一個實現,將本地緩存作為分散式緩存,主要用於沒有分散式緩存的情況,這樣就可以不修改程式的情況下直接使用本地緩存。 第二個實現,使用redis作為分散式緩存。 如果想使用Mem ...
上節,我們說明瞭封裝分散式緩存的介面、配置以及在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 _Cache 11 { 12 get 13 { 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 _Cache 16 { 17 get 18 { 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類就萬事大吉了:)
MemcachedClient