如何在 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/web-development/how-to-implement-a-distributed-cache-in-aspnet-core.html
如何在 ASP.Net Core 使用 分布式缓存相关推荐
- 如何在 ASP.Net Core 使用 内存缓存
ASP.NET Core 是一个轻量级,模块化的框架,常用来在 Windows,Linux 和 MacOS 上构建高性能,现代化的web框架,不像过去的 Asp.NET,在 ASP.NET Core ...
- 如何在 ASP.NET Core 中使用 LazyCache
微软的 ASP.NET Core 已经是一个非常流行的用于构建 高性能, 模块化 并能运行在 Windows, Linux, MacOS 上的 WEB 框架,通常能够让程序保持高性能的一个有效途径就是 ...
- 如何在 ASP.Net Core 中使用 NCache
虽然 ASP.Net Core 中缺少 Cache 对象,但它引入了三种不同的cache方式. 内存缓存 分布式缓存 Response缓存 Alachisoft 公司提供了一个开源项目 NCache, ...
- 如何在ASP.NET Core程序启动时运行异步任务(3)
原文:Running async tasks on app startup in ASP.NET Core (Part 3) 作者:Andrew Lock 译者:Lamond Lu 之前我写了两篇有关 ...
- 如何在 ASP.NET Core 中使用 HttpClientFactory ?
ASP.Net Core 是一个开源的,跨平台的,轻量级模块化框架,可用它来构建高性能的Web程序,这篇文章我们将会讨论如何在 ASP.Net Core 中使用 HttpClientFactory. ...
- 如何在 Asp.Net Core 中对请求进行限流
译文链接:https://www.infoworld.com/article/3442946/how-to-implement-rate-limiting-in-aspnet-core.html 在应 ...
- 如何在ASP.NET Core程序启动时运行异步任务(2)
原文:Running async tasks on app startup in ASP.NET Core (Part 2) 作者:Andrew Lock 译者:Lamond Lu 在我的上一篇博客中 ...
- [第二篇]如何在ASP.Net Core的生产环境中使用OAuth保护swagger ui
在我上篇文章如何在ASP.Net Core的生产环境中保护swagger ui中,我们讨论了如何使用基本身份验证来保护 swagger ui. 使用 OAuth 2.0 和 OpenIdConnect ...
- NET问答: 如何在 ASP.NET Core 的 .json 文件中读取 AppSettings ?
咨询区 Oluwafemi: 在 appsettings.json 中我有如下的 AppSettings 实体数据,如下代码所示: {"AppSettings": {"t ...
最新文章
- 一个北京小网编从1000块起家的网络直销故事
- glassfish_多种监视和管理GlassFish 3的方法
- 剖析云平台中的“共享型数据库”
- html中在线预览pdf文件之pdf在线预览插件
- 100层楼扔2个鸡蛋、3个鸡蛋……
- 摩托罗拉edge X30屏下版真机首曝:四边等宽 屏下显示效果出众
- 深度学习基础(八)—— 稀疏自编码器
- Mac osx 技巧
- C/C++中struct/union/class内存对齐
- 秒杀系统的核心点都在这里,快来取
- 【jzoj5335】早苗
- 喜羊羊与灰太狼java_java swing实现喜羊羊与灰太狼推箱子游戏附带视频开发教程...
- win7查看隐藏文件夹
- 利用windows事件管理器定位程序闪退错误
- 基于MATLAB的线性规划:linprog用法
- java树结构stream工具类
- Java日期时间的设置问题
- python socket发包_python 多线程tcp udp发包 Dos工具。
- 英语作文计算机国际会议开幕词,学术会议开幕词英文.doc
- 类各种成员的访问权限 及 友员类和友员函数