如何在ASP.Net Core使用分布式緩存的實(shí)現(xiàn)
ASP.Net Core 提供了多種類型的緩存,除了內(nèi)存緩存和響應(yīng)緩存之外,還提供了對(duì) 分布式緩存 的支持。在之前的一篇文章中,我討論了 ASP.Net Core 的內(nèi)存緩存。在本文中,我們將討論如何在 ASP.Net Core 中使用分布式緩存,本篇就拿 Redis 和 SQL Server 作為演示。
什么是分布式緩存
分布式緩存 可用于提高應(yīng)用程序的性能和可伸縮性,通常 分布式緩存 被多個(gè)應(yīng)用服務(wù)器共享,在分布式緩存中,緩存的數(shù)據(jù)不會(huì)落在某些個(gè)別的web服務(wù)器內(nèi)存中,這些緩存數(shù)據(jù)采用集中化存儲(chǔ),這樣多個(gè)應(yīng)用服務(wù)器都可以直接使用,這樣做的好處在于,如果任何一個(gè)服務(wù)器宕機(jī)或者停止響應(yīng),其他的服務(wù)器仍然能夠檢索緩存的數(shù)據(jù)。分布式緩存的另一個(gè)優(yōu)點(diǎn)是,緩存的數(shù)據(jù)在服務(wù)器重啟后仍然存在,當(dāng)你的應(yīng)用集群擴(kuò)展時(shí),并不會(huì)對(duì)緩存服務(wù)器造成任何影響。
要想在 ASP.NET Core 中使用分布式緩存,需要用到 IDistributedCache 接口,在下一節(jié)中,我們將會(huì)一起討論 IDistributedCache 和 IMemoryCache 接口的區(qū)別。
IDistributedCache 接口
在.Net Core 中用于分布式緩存的 IDistributedCache 接口要比 單機(jī)版的 IMemoryCache 接口更復(fù)雜,先來看一下 IMemoryCache 接口定義。
public interface IMemoryCache : IDisposable
{
bool TryGetValue(object key, out object value);
ICacheEntry CreateEntry(object key);
void Remove(object key);
}
IDistributedCache 接口是為 web farm 場(chǎng)景設(shè)計(jì)的, 它包含了一組同步和異步方法,可用于對(duì)緩存的 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);
}
有一點(diǎn)值得注意,上面的 Set 方法的 value 僅支持 byte[],有點(diǎn)坑哈,當(dāng)然你要塞入 string 的話, 不用擔(dān)心,ASP.NET Core 也提供了擴(kuò)展方法對(duì)其進(jìn)行支持.
如何使用 Redis 作為緩存介質(zhì)
可以通過 Nuget 來安裝如下擴(kuò)展包,代碼如下:
Install-Package Microsoft.Extensions.Caching.Redis
為了能夠把 Redis 作為應(yīng)用底層緩存,需要使用 AddDistributedRedisCache() 擴(kuò)展方法,下面的代碼展示了如何去配置:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddDistributedRedisCache(option =>
{
option.Configuration ="localhost";
option.InstanceName ="IDG";
});
}
如何注入到 Controller
下面的代碼清單展示了如何將 IDistributedCache 注入到 Controller 中并實(shí)現(xiàn)從 Redis 中進(jìn)行插入和讀取。
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 作為緩存介質(zhì)
要想將 SqlServer 作為底層的緩存介質(zhì),需要通過 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 來存放緩存數(shù)據(jù),代碼如下:
dotnet sql-cache create <connection string> <schema> <table>
ASP.Net Core 提供了分布式緩存的高層抽象。因此,無論底層緩存介質(zhì)是 Redis 還是 SQL Server, IDistributedCache接口都提供了統(tǒng)一并且便捷的操控Cache的API,而且 IDistributedCache 注入到 Controller 中也是非常方便的。
譯文鏈接:https://www.infoworld.com/article/3262990/how-to-implement-a-distributed-cache-in-aspnet-core.html
到此這篇關(guān)于如何在ASP.Net Core使用分布式緩存的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)ASP.Net Core 分布式緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Asp.net Core 3.1基于AspectCore實(shí)現(xiàn)AOP實(shí)現(xiàn)事務(wù)、緩存攔截器功能
- .NetCore之接口緩存的實(shí)現(xiàn)示例
- ASP.NET Core中的Http緩存使用
- .NET Core系列之MemoryCache 緩存域
- .NET Core系列之MemoryCache 緩存選項(xiàng)
- .NET Core系列之MemoryCache 緩存過期
- 詳解Asp.Net Core 2.1+的視圖緩存(響應(yīng)緩存)
- ASP.NET Core緩存靜態(tài)資源示例詳解
- Asp.Net中MVC緩存詳解
- 詳解.Net緩存之MemoryCahe
相關(guān)文章
asp.net中的“按需打印”(打印你需要打印的部分) 實(shí)現(xiàn)代碼
有時(shí)我們需要對(duì)asp.net網(wǎng)頁(yè)中某些特定部分進(jìn)行打印,很多人采用CSS樣式或特定的打印控件來解決網(wǎng)頁(yè)定制打印功能。這里采用Javascript樣式替換方式進(jìn)行打印,使網(wǎng)頁(yè)顯示與打印效果相分離。2013-06-06
asp.net分頁(yè)控件使用詳解【附實(shí)例下載】
本篇文章主要對(duì)asp.net創(chuàng)建事務(wù)的方法進(jìn)行實(shí)例介紹,具有很好的參考價(jià)值,需要的朋友一起來看下吧2016-12-12
asp.net中在用ajax格式傳遞數(shù)據(jù)到aspx頁(yè)面時(shí)出現(xiàn)亂碼
asp.net中在用ajax格式傳遞數(shù)據(jù)到aspx頁(yè)面時(shí)有時(shí)會(huì)出現(xiàn)亂碼,很是疑惑,不要走開接下來介紹解決方法,感興趣的朋友可以了解下2013-01-01
Silverlightbutton圖片切換樣式實(shí)例代碼
這篇文章介紹了Silverlightbutton圖片切換樣式實(shí)例代碼,有需要的朋友可以參考一下2013-11-11
通過RadioButton對(duì)DataList控件進(jìn)行單選實(shí)例說明
本例實(shí)現(xiàn)通過RadioButton對(duì)DataList控件進(jìn)行單選,aspx拉一個(gè)DataList控件,把RadioButton置于DataList的ItemTemplate模版內(nèi);在.aspx.cs內(nèi)為DataList控件綁定數(shù)據(jù),很實(shí)用的功能,感興趣的朋友可以了解下啊2013-01-01
asp.net實(shí)現(xiàn)固定GridView標(biāo)題欄的方法(凍結(jié)列功能)
這篇文章主要介紹了asp.net實(shí)現(xiàn)固定GridView標(biāo)題欄的方法,即凍結(jié)列功能,涉及GridView結(jié)合前端js操作數(shù)據(jù)顯示的相關(guān)技巧,需要的朋友可以參考下2016-06-06

