如安在ASP.Net Core利用漫衍式缓存的实现

ASP.Net Core 提供了多种范例的缓存,除了内存缓存和响应缓存之外,还提供了对 漫衍式缓存 的支持。在之前的一篇文章中,我接头了 ASP.Net Core 的内存缓存。在本文中,我们将接头如安在 ASP.Net Core 中利用漫衍式缓存,本篇就拿 Redis 和 SQL Server 作为演示。

什么是漫衍式缓存

漫衍式缓存 可用于提高应用措施的机能和可伸缩性,凡是 漫衍式缓存 被多个应用处事器共享,在漫衍式缓存中,缓存的数据不会落在某些个此外web处事器内存中,这些缓存数据回收会合化存储,这样多个应用处事器都可以直接利用,这样做的长处在于,假如任何一个处事器宕机可能遏制响应,其他的处事器仍然可以或许检索缓存的数据。漫衍式缓存的另一个利益是,缓存的数据在处事器重启后仍然存在,当你的应用集群扩展时,并不会对缓存处事器造成任何影响。

要想在 ASP.NET Core 中利用漫衍式缓存,需要用到 IDistributedCache 接口,在下一节中,我们将会一起接头 IDistributedCache 和 IMemoryCache 接口的区别。

IDistributedCache 接口

在.Net Core 顶用于漫衍式缓存的 IDistributedCache 接口要比 单机版的 IMemoryCache 接口更巨大,先来看一下 IMemoryCache 接口界说。

public interface IMemoryCache : IDisposable { bool TryGetValue(object key, out object value); ICacheEntry CreateEntry(object key); void Remove(object key); }

IDistributedCache 接口是为 web farm 场景设计的, 它包括了一组同步和异步要领,可用于对缓存的 Add,Remove,Retrieve 操纵,下面是 IDistributedCache 接口的界说。

public interface IDistributedCache { byte[] Get(string key); Task<byte[]> GetAsync(string key); void Set(string key, byte[] value, DistributedCacheEntryOptions options); Task SetAsync(string key, byte[] value, DistributedCacheEntryOptions options); void Refresh(string key); Task RefreshAsync(string key); void Remove(string key); Task RemoveAsync(string key); }

有一点值得留意,上面的 Set 要领的 value 仅支持 byte[],有点坑哈,虽然你要塞入 string 的话, 不消担忧,ASP.NET Core 也提供了扩展要领对其举办支持.

如何利用 Redis 作为缓存介质

可以通过 Nuget 来安装如下扩展包,代码如下:

Install-Package Microsoft.Extensions.Caching.Redis

为了可以或许把 Redis 作为应用底层缓存,需要利用 AddDistributedRedisCache() 扩展要领,下面的代码展示了如何去设置:

public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddDistributedRedisCache(option => { option.Configuration ="localhost"; option.InstanceName ="IDG"; }); }

如何注入到 Controller

下面的代码清单展示了如何将 IDistributedCache 注入到 Controller 中并实现从 Redis 中举办插入和读取。

public class DefaultController : Controller { private readonly IDistributedCache _distributedCache; public HomeController(IDistributedCache distributedCache) { _distributedCache = distributedCache; } [HttpGet] public async Task<string> Get() { var cacheKey ="IDG"; var data = _distributedCache.GetString(cacheKey); if (!string.IsNullOrEmpty(data)) { return data; //returned from Cache } else { string str ="Hello World"; _distributedCache.SetString(cacheKey, str); return str; } } }

如何利用 SqlServer 作为缓存介质

要想将 SqlServer 作为底层的缓存介质,需要通过 Nuget 安装如下包:

Install-Package Microsoft.Extensions.Caching.SqlServer Install-Package Microsoft.Extensions.Caching.SqlConfig.Tools

如安在 Startup.ConfigureServices() 中做如下设置。

public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); services.AddDistributedSqlServerCache(x => { x.ConnectionString = Configuration["ConnectionStrings:Default"]; x.SchemaName = "dbo"; x.TableName = "IDGCache"; }); }

接下来通过如下呼吁在 SqlServer 中生成 Table 来存放缓存数据,代码如下:

dotnet sql-cache create <connection string> <schema> <table>

ASP.Net Core 提供了漫衍式缓存的高层抽象。因此,无论底层缓存介质是 Redis 照旧 SQL Server, IDistributedCache接口都提供了统一而且便捷的操控Cache的API,并且 IDistributedCache 注入到 Controller 中也长短常利便的。

译文链接:https://www.infoworld.com/article/3262990/how-to-implement-a-distributed-cache-in-aspnet-core.html

到此这篇关于如安在ASP.Net Core利用漫衍式缓存的实现的文章就先容到这了,更多相关ASP.Net Core 漫衍式缓存内容请搜索剧本之家以前的文章或继承欣赏下面的相关文章但愿各人今后多多支持剧本之家!

您大概感乐趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsdxzw.html