• 在.Net core中常规缓存和分布式缓存的使用
  • 发布于 2个月前
  • 226 热度
    0 评论
  • 金龙鱼
  • 9 粉丝 45 篇博客
  •   

Web开发人员经常寻找提高Web应用程序性能的机会。而缓存是提高web应用程序员的利器,今天就讲一下在.net core中如何使用缓存来提高应用程序的性能。

使用Cache标签进行缓存:

在.net core中,我们可以直接在视图页面使用<cache>标签实现客户端的缓存。如下:

<cache>
    <h3>This content is cached : @DateTime.Now</h3>
</cache>
上面的标记将时间戳缓存20分钟(默认值)。您可以将要缓存的所有内容放在<cache>和<cache>标记中。内容可以是纯HTML标记或Razor标记和代码。<cache>标签有许多可用于配置缓存行为的属性。一些常用的属性如下所示。

<cache expires-after="@TimeSpan.FromMinutes(30)">
    <h3>This content is cached : @DateTime.Now</h3>
</cache>
Expires After属性指定一个时间跨度(本例中为30分钟),在该时间跨度之后,将从服务器中删除缓存的输出,以便创建新的缓存版本。

<cache expires-on="@DateTime.Now.AddMinutes(30)">
    <h3>This content is cached : @DateTime.Now</h3>
</cache>
Expires On属性采用日期时间偏移量,并根据结果日期和时间值使缓存内容过期。在上述情况下,内容将被缓存,直到datetime值与30分钟后的值相同。此选项与前面的选项类似,但使用的是显式日期时间值,而不是TimeSpan值。

<cache expires-sliding="@TimeSpan.FromSeconds(30)">
    <h3>This content is cached : @DateTime.Now</h3>
</cache>
expires sliding是一个时间跨度,如果不访问,缓存内容将在该时间跨度之后过期。注意过期后和过期滑动之间的差异。Expires After属性将使内容过期,无论是否正在访问该页。另一方面,Expires sliding是一个超时值,如果在该时间窗口内访问页面,则它将更新到期时间。


分布式缓存

刚才讨论的缓存标记助手使用服务器的内存来存储缓存的内容。接下来我们来讨论一下分布式缓存的用法。
分布式缓存使用单独的存储,如SQL Server 或者 Redis。要使用分布式缓存,您需要为Web应用程序启用分布式缓存。在这个例子中,我们将使用一个SQL服务器来存储缓存。

首先需要添加microsoft.extensions.caching.sqlserver nuget包的引用,然后在Visual Studio开发人员命令提示框输入如下命令:

dotnet sql-cache create 
"Data Source=.;Initial Catalog=Northwind;Integrated Security=True;" 
dbo MySQLCache
上面这段代码使用Create命令在本机SQLServer的Northwind数据库中创建了一张MySQLCache表来存储缓存信息,在实际开发中,你们把数据库连接字符串换成你们实际的应用就可以了。

接下来打开Startup类并转到configureServes()方法,在方法内添加如下代码:

services.AddDistributedSqlServerCache(options =>
    {
        options.ConnectionString = @"Data Source=.;
Initial Catalog=Northwind;Integrated Security=True;";
        options.SchemaName = "dbo";
        options.TableName = "MySQLCache";
    });
AddDistributedSQLServerCache()方法在DI框架中注册分布式缓存服务。现在,您可以在视图文件或Razor页面中使用<distributed cache>标签来添加缓存了,如下:
<distributed-cache name="mydistcache" 
expires-after="@TimeSpan.FromSeconds(30)">
    <h3>This content is cached : @DateTime.Now</h3>
</distributed-cache>
此时,你再运行实例,会在数据库生成如下一笔数据:

用户评论