|
概述
.NET的内存缓存比较适合部署到单机,那么涉及到规模比较中大型网站,由于单机内存等环境的限制,已经不适合使用内存缓存了,另外如果内存缓存分布式部署可能会造成数据不同步、不能数据持久化、使用不方便等问题。这就需要使用分布式缓存了。分布式缓存由一个服务端实现管理和控制,有多个客户端节点存储数据,作为应用的外部共享服务缓存,根据一致性哈希算法等确定数据的存储和读取节点。分布式缓存有跨多个服务器请求、应用服务器宕机和重启后仍然有效、数据可以读写分离、高性能、高可用等优点。这篇文章介绍http://ASP.NET CORE 基于Redis和Sql Server分布式缓存。
一、使用概述
Redis和sql server分布式缓存的使用方法基本相同,来自于IDistributedCache接口和DistributedCacheExtensions扩展类。可以通过DistributedCacheEntryOptions类配置过期时间等。
1、读使用Get、GetString及其对应的异步方法。根据key键获取对应的值
2、写可以使用Set、SetString及其对应的异步方法
3、移除可以使用Remove及其对应的异步方法
下面分别举例说明redis和sql server分布式缓存的使用。
二、Redis分布式缓存
我们这里新建一个http://ASP.NET Core 6.0webAPI网站来演示使用,可以分为三步使用
1、安装redis依赖包
使用Redis分布式缓存需要安装Redis的支持包,可以通过nuget命令安装,如下
install-packageMicrosoft.Extensions.Caching.StackExchangeRedis2、在Program.cs文件中注册
注册需要配置链接地址和名称,如下:
builder.Services.AddStackExchangeRedisCache(option =>{option.Configuration="10.10.10.110:6379";
//链接地址
option.InstanceName = "myredis";
//名字});3、在项目API控制中使用
首先服务注入,如下:
public IDistributedCache _cache;
public CacheController(IDistributedCache cache) {
_cache=cache; }我们用三个接口方法来演示增加、获取、移除缓存,可以在增加的缓存使用配置设置过期时间,如下:
[HttpPost]
public async Task<IActionResult> Post()
{DistributedCacheEntryOptionsoptions=newDistributedCacheEntryOptions();
//相对过期时间请求10分钟内有再次请求会再延长十分钟,否则失效
//options.SlidingExpiration = TimeSpan.FromSeconds(10);
//2.绝对过期时间(两种形式)绝对是请求5秒过期无论使用与否都失效 options.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(80); //options.AbsoluteExpiration= new DateTimeOffset(DateTime.Parse(&#34;2022-08-27 16:33:10&#34;)); await _cache.SetStringAsync(&#34;KeyName&#34;, &#34;Cache&#34;); return Ok(); }
[HttpGet] public async Task<IActionResult> rGet() { await _cache.GetStringAsync(&#34;KeyName&#34;); return Ok(); }
[HttpDelete] public async Task<IActionResult> Delete() { await _cache.RemoveAsync(&#34;KeyName&#34;); return Ok(); }这样可以运行程序试试,看能否正常运行。我们正常的情况下可以把这个封装成个类来使用更方便。
Redis分布式缓存优点是基于内存访问速度快,使用方便不用建表等。
三、Sql Server分布式缓存
Sql Server分布式缓存使用方法跟Redis分布式缓存大同小异,最大的不同是Sql Server分布式缓存需要建表,另外配置略有不同。同样我们使用上面的API来使用使用Sql Server分布式缓存,步骤如下:
1、安装Sql Server分布式缓存依赖包
install-packageMicrosoft.Extensions.Caching.SqlServer2、建库和生成表
新建一个名叫“CacheDB”表,并执行如下命令自动生成表。
dotnetsql-cachecreate&#34;Server=localhost;User=sa;Password=123456;Database=CacheDB&#34;dboAspNetCoreCache 这里有个坑,安装报错,错误提示如下:
找不到&#34;dotnetsql-cache&#34;命令,请运行以下命令进行安装dotnettoolinstall--globaldotnet-sql-cache
用提示命令安装继续报错,笔者通过查看nuget官网说明,需要带上指定版本号才能执行成功,如下:
dotnet tool install --global dotnet-sql-cache --version 6.0.0
这时候再执行dotnet sql-cache create后成功建表,并返回如下提示
Table and index were created successfully.
再来看看数据库,成功生成表和库

3、在Program.cs文件中注册
注册方式略有不同,如下:
builder.Services.AddDistributedSqlServerCache(option =>{
//option.SystemClock = new LocalSystemClock();
//这里为啥这样写,因为时区问题
option.ConnectionString = &#34;Server=localhost;User=sas;Password=654321;Database=CacheDB&#34;;option.SchemaName=&#34;dbo&#34;;
//指定类型
option.TableName=&#34;AspNetCoreCache&#34;;
//表名,默认,也可以在这指定
option.DefaultSlidingExpiration = TimeSpan.FromMinutes(3);//设置默认过期时间});
//设置本地时区
public class LocalSystemClock : ISystemClock{
public DateTimeOffset UtcNow => DateTime.Now;}这样就完成了配置。API接口跟redis完全一样,这里就不再展示。写入的缓存效果如下

Sql Server分布式缓存的优点是持久化存储方便,微软官方支持兼容好,缺点是关系数据库读取速度没有redis快,但也能满足中小型网站使用。
结语
本文讲述了http://asp.net core二种分布式缓存的简单使用,具体大家可以封装成类来使用。希望本文对大家学习和工作有一定参考价值,同时欢迎大家留言讨论,谢谢大家的支持。
版权声明:本文来源于网友收集或网友提供,仅供学习交流之用,如果有侵权,请转告版主或者留言,本公众号立即删除。
关注:DotNet开发跳槽 |
|