说明
一般来说,缓存的地方经常使用的数据存储,以便应用程序可以快速访问数据,而不是从源访问数据。缓存可以提高应用程序的性能和可扩展性,大大有助于我们从外部数据源的数据经常变化的去除不必要的要求。
ASP.NET的核心 具有丰富的支持缓存并支持各种不同的缓存。在我过去的文章中,我解释了一下在内存中缓存。在这篇文章中,我们将讨论分布式缓存。它能帮助我们提高性能和可扩展性的应用程序,当应用程序驻留在Web场或云环境。
在分布式缓存,缓存中没有存储到一个单独的Web服务器的内存。缓存数据的集中管理,同一数据可供所有应用程序服务器。分布式缓存有几个优点,如下图所示。
- 高速缓存是集中存储的,所以所有的用户获得相同的数据和数据不依赖于Web服务器处理请求。
- 缓存数据是不受影响,如果有任何问题发生在Web服务器;即,重启,添加新的服务器,服务器被删除。
分布式缓存可以配置或者Redis或SQL Server。对缓存的实现不依赖于配置;应用与缓存进行交互,使用idistributedcache接口。
idistributedcache接口
这个接口的方法,它允许我们添加、删除和检索分布式缓存。该接口包含同步和异步方法。
- 得到的,GetAsync
它检索数据从缓存中,使用的密钥。它返回的字节[],如果钥匙不在缓存。
- 集,SetAsync
它增加了项目缓存字节[ ]。
- 刷新,RefreshAsync
它刷新的缓存项目并重置其过期超时,如果任何。
- 删除RemoveAsync
它从缓存中移除条目,使用关键。
我们需要执行三个简单的步骤,下面给出的配置在ASP.NET核心的分布式缓存。
- 定义为project.json文件缓存依赖项。
- 配置启动类缓存服务configureservices方法。
- 依赖自动注入到应用程序的中间件或MVC控制器的构造函数。使用这种缓存依赖项对象的实例,我们可以执行分布式缓存相关的操作
SQL Server分布式缓存
sqlservercache允许分布式缓存使用SQL Server作为缓存存储的目的。使用SQL Server作为一个缓存之前,我们必须创造以下架构表。
- 创造 表[ ] [ ](sqlcache dbo。
- [编号] [为](449)不 无效的,
- [价值] [ varbinary ](最大值)不 无效的,
- [ expiresattime ] [ DateTimeOffset ](7)不 无效的,
- [ slidingexpirationinseconds ] [bigint]无效的,
- 【absoluteExpiration ] [ DateTimeOffset ](7)无效的,
- 约束[ pk_id ]首要 钥匙聚([编号]ASC)与(pad_index =关闭,statistics_norecompute =关闭,ignore_dup_key =关闭,allow_row_locks =打开(放),allow_page_locks =打开(放))
- 打开(放)【首要])打开(放)【首要textimage_on [ ]首要]
下一步是添加依赖关系到project.json文件。使用SQL Server作为缓存,我们需要添加“微软。扩展。缓存。SQLServer”依赖的项目。
<strong>project.json</strong>
- {
- “版本”:“1.0.0 *”,
- “buildoptions”:{
- “preservecompilationcontext”:真正的,
- “debugtype”:“便携式”,
- “emitentrypoint”:真正的
- },
- “工具”:{
- “微软。扩展。缓存。sqlconfig。工具”:“1.0.0-preview2-final”
- },
- “依赖”:{ },
- “框架”:{
- “netcoreapp1.0”:{
- “依赖”:{
- “微软。磊科。应用程序”:{
- “类型”:“平台”,
- “版本”:“1.0.1”
- },
- “微软。aspnetcore红隼。服务器。”:“1.0.0”,
- “微软。aspnetcore。MVC”:“1.0.0”,
- “微软。扩展。缓存。记忆”:“1.0.0”,
- “微软。扩展。缓存。SQLServer”:“1.0.0”
- },
- “进口”:“dnxcore50”
- }
- }
- }
现在,我们需要在启动类configureservices方法的一些配置。使用方法”adddistributedsqlservercache”,我们可以配置SQL Server作为缓存。在这种方法中,我们需要通过连接字符串,架构名称和缓存表名称。
startup.cs- 公共无效configureservices(iservicecollection服务){
- addmvc()服务;
- 服务。adddistributedsqlservercache(OPT = > {
- opt.connectionstring = @“服务器desktop-hp \ SQL;数据库= cachingtest;trusted_connection = true;”;
- opt.schemaname =“dbo”;
- opt.tablename =“sqlcache”;
- });
- }
使用方法(得到上面所说的,设置和删除),我们可以访问SQL缓存。SQL缓存中存放的是二进制格式,所以我们需要转换为字节[]之前存储在缓存和数据从缓存中检索时,系统会返回字节[ ]。使用数据,我们需要将它需要的格式。
在下面的例子中,我创建了创建缓存方法,检索缓存和清除高速缓存控制器。ASP.NET核心的MVC控制器能够要求他们依赖明确通过构造函数。我们利用缓存在我们的应用程序中的控制要求idistributedcache实例构造函数(或中间件)。在下面的代码片段中,我创建了控制器类的三种方法setcachedata,getcachedata和removecachedata。
HomeController.cs- 使用系统;
- 文本使用系统;
- 使用microsoft.aspnetcore.mvc;
- 使用microsoft.extensions.caching.distributed;
- 公共类:{ HomeController控制器
- idistributedcache _memorycache;
- 公共(idistributedcache HomeController memorycache){
- _memorycache = memorycache;
- }
- 【路线(“家/ setcachedata”)]
- 公共iactionresult setcachedata() {
- VaR时间=日期。现在。tolocaltime()。tostring();
- 无功cacheoptions =新distributedcacheentryoptions {
- absoluteExpiration =日期。现在,AddYears(1)
- };
- _memorycache。配置(“时间”GetBytes(UTF8,编码。时间),cacheoptions);
- 退货 意见();
- }
- 【路线(“家/ getcachedata”)]
- 公共iactionresult getcachedata() {
- 字符串时间=空字符串;
- 时间=编码。UTF8。GetString(_memorycache。得到(“时间”));
- viewbag.data =时间;
- 退货 意见();
- }
- 【路线(“家/ removecachedata”)]
- 公共布尔removecachedata() {
- _memorycache。删除(“时间”);
- 退货 真正的;
- }
- }
SQL表的输出
我们称之为控制器的setcachedata时,它存储的数据到SQL表,这是在配置中指定。下面给出的代码片段,说明SQL Server存储数据。
使用redis分布式缓存
redis是一个开源的、存储在内存中的数据,这是作为一个分布式缓存。我们可以将它安装在本地和配置。同时,我们可以配置一个Azure的Redis的缓存。为了在Windows机器上安装使用的最简单的方法是
巧克力。安装在本地计算机上运行呢,下面从PowerShell命令(管理模式)。
PS C:\“IEX((新对象。WebClient)。DownloadString('https:/ /巧克力/安装。org。PS1的))这个命令下载Windows安装程序,chocalatey使用下面的命令,我们可以在本地计算机上安装使用。
PS C:\安装redis-64 >巧克力一旦安装Redis服务器,使用下面的命令,在这里我们可以开始Redis服务器。
PS C:\ > redis服务器检查是否redis服务器开始正常工作,我们可以ping服务器,使用redis客户端。
如果服务器工作正常,则返回“乒乓球”作为回应。
现在,Redis服务器可以作为一个分布式缓存。我们需要强调以下在project.json文件依赖。在这里,Redis的依赖只能与.NET Framework 4.5.1和4.5.2,所以我使用.NET Framework 4.5.1。
project.json- {
- “buildoptions”:{
- “preservecompilationcontext”:真正的,
- “debugtype”:“便携式”,
- “emitentrypoint”:真正的
- },
- “依赖”:{
- “微软。aspnetcore红隼。服务器。”:“1.0.0”,
- “微软。aspnetcore。MVC”:“1.0.0”,
- “微软。扩展。缓存。redis”:“1.0.0”
- },
- “框架”:{
- “net451”:{ },
- }
- }
使用下面的代码,我们可以配置Redis服务器作为项目中的高速缓存。在这里,我们需要通过服务器的地址配置和服务器实例的名称作为一个实例名称属性。我的服务器运行在本地,所以我必须通过“本地:6379“作为配置。
statup.cs- 公共无效configureservices(iservicecollection服务){
- addmvc()服务;
- 服务。adddistributedrediscache(选项= > {
- 配置选项。“本地:6379”;
- options.instancename =“”;
- });
- }
应用程序代码是相同的如SQL分布式缓存。我们也可以验证多少钥匙是活跃在redis服务器通过运行以下命令在redis客户端。
127.0.0.1:6379 >键*概要 如果我们比较一下
在内存中缓存分布式缓存在内存缓存比分布式缓存更快,但是它有一些缺点。如果我们将以上两描述分布式缓存Redis服务器选项,比SQL Server快。为了提高SQL Server分布式缓存的性能,我们可以使用内存优化的表但varbinary(max)和缓存DateTimeOffset数据类型不支持
内存优化表如果我们想为缓存使用SQL Server,我们可以用“
DBCC便携式“为了确保表存放在内存。